Bonjour,
Je suis débutant en programmation assembleur, j'utilise NASM sous Ubuntu 64 pour créer des programmes 64 bits et il m'est impossible d'utiliser les fonctions standard du C (printf en l'occurence)...Voici mon code :
Je créé l'exécutable de cette façon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 section .data s_err: db 'Use: ./echo <string>', 0xA s_err_len: equ $ - s_err hello: db 'Hello world!', 0xA helloLen: equ $ - hello s_test: db 'Hello !', 0xA, 0x0 section .text global _start extern printf _start: ; Checking argc pop rax cmp rax, 2 je args_ok args_nok: ; Displaying error message (sys_write) mov rax, 4 mov rbx, 2 mov rcx, s_err mov rdx, s_err_len int 80h ; Exiting (1) mov rax, 1 mov rbx, 1 int 80h args_ok: ; TODO push s_test call printf pop rax ; Exiting program (0) mov rax, 1 mov rbx, 0 int 80h
A l'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 nasm -f elf64 echo.asm ld -s -m elf_x86_64 -o echo echo.o -lc
Quel est le problème ? Si je vire l'appel à printf dans le code assembleur et le lien avec la bibliothèque C, ça fonctionne...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ./echo bash: ./echo: Aucun fichier ou dossier de ce type
Edit : je précise que le fichier echo existe bien dans le répertoire et qu'il est exécutable !
Merci de votre aide !
Partager