NASM - Hello, World¶
2010
Hello, World [windows]¶
Cet extrait de code en assembleur affiche le message « Hello, World! » en utilisant une bibliothèque à liaison dynamique (pour la fonction _printf). Les arguments de la fonction _printf sont empilés sur la pile.
global _main
extern _printf
extern _exit
section .data
message db 'Hello, World', 10, 0
section .text
_main:
push message
call _printf
xor eax, eax
push eax
call _exit
Au moment de l’édition de liens, libcrtdll.a est ajoutée, cette bibliothèque contient les fonctions _printf et _exit.
nasm -f win32 hellworld.asm
ld hellworld.o libcrtdll.a -o hellworld
Autrement, vous pouvez compiler en utilisant gcc au lieu de ld.
nasm -f win32 hellworld.asm
gcc hellworld.o
Bibliothèque statique et dynamique¶
Créer une bibliothèque¶
Écriture de la fonction
myFunctionen assembleur
; file : libHello.asm
BITS 64
section .data
hello db \"Hello World !\", 0xa
len equ $ - hello
section .text
global myFunction:function
myFunction:
mov rax, 4
mov rbx, 1
mov rcx, QWORD hello
mov rdx, len
int 0x80
ret
Compiler la bibliothèque statiquement
nasm -f elf64 libHello.asm
ar rcs libHello.a libHello.o
Compiler la bibliothèque dynamique
nasm -f elf64 libHello.asm
ld -shared -o libHello.so libHello.o
Exemple d’utilisation de la bibliothèque¶
Code C utilisant une fonction de la bibliothèque
// file : main.c
int main(int argc, char **argv) {
myFunction();
return 0;
}
Compiler avec la bibliothèque statique
gcc -static main.c -L. libHello.a -o statically_linked
Compiler avec la bibliothèque dynamique
gcc main.c -o dynamically_linked -L -l c_printf.so.1.0.1