#1 Le 05/02/2010, à 10:07
- Makak_du_27
Comment utiliser ld avec puts?
Bonjour,
Je vous expose mon problème: J'ai un fichier hello1.s (contenu ci-après). Le bogue se passe à l'étape d'éditions des liens avec cette ligne:
$ld -o hello1 /lib/libc.so.6 hello1.o -lc
On lie /lib/libc.so.6 pour puts. Au final, j'ai bien un fichier exécutable hello1 mais lorsque j'essaie de l'exécuter, le bash me retourne:
bash: ./hello1: Aucun fichier ou répertoire de ce type
Pourriez-vous me dire ce qu'il se passe?
Merci,
Cordialement,
Makak_du_27
.text
message :
.ascii "hello world ! \0"
.align 4
.global _start
_start :
pushl %ebp
movl %esp,%ebp
pushl $message
call puts
addl $4,%esp
movl %ebp,%esp
popl %ebp
ret
PS: Cela fonctionnait il y a à peu près trois ans...
Dernière modification par Makak_du_27 (Le 05/02/2010, à 10:08)
Hors ligne
#2 Le 05/02/2010, à 10:25
- credenhill
Re : Comment utiliser ld avec puts?
hello
que répond
file hello1
Hors ligne
#3 Le 05/02/2010, à 10:39
- Makak_du_27
Re : Comment utiliser ld avec puts?
file hello1 retourne:
hello1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
Hors ligne
#4 Le 05/02/2010, à 10:55
- Nasman
Re : Comment utiliser ld avec puts?
Je pense qu'il te faut déclarer puts comme extern. Je ne suis pas sur qu'il faille lier la libc.so.6 au fichier (puisqu'elle est dynamique).
J'avais fait quelques programmes en assembleur sous l'OS quon ne citera pas et il fallait juste créer l'exécutable (à l'édition des liens) à partir du fichier objet.
J'ai du faire la même chose sous Linux mais il faut que je vérifie la chose.
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#5 Le 05/02/2010, à 11:08
- Nasman
Re : Comment utiliser ld avec puts?
Je viens de retrouver un programme quasiment identique réalisé avec nasm
BITS 32
EXTERN puts
SECTION .data
chaine db "Hello world !", 0
SECTION .text
GLOBAL main
main:
push dword chaine
call puts
add esp, 4
ret
Compilation
nasm -felf32 helloputs.asm -o helloputs.o
Edition des liens
gcc helloputs.o helloputs
Exécution
./helloputs
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#6 Le 05/02/2010, à 11:29
- Makak_du_27
Re : Comment utiliser ld avec puts?
Voila, j'ai donc rajouté EXTEND puts en haut du code comme ceci:
EXTERN puts
.text
message :
.ascii "hello world ! \0"
.align 4
.global _start
_start :
pushl %ebp
movl %esp,%ebp
pushl $message
call puts
addl $4,%esp
movl %ebp,%esp
popl %ebp
ret
Mais j'ai une erreur à la compilation:
$ as hello1.s -o hello1.o
renvoi:
hello1.s:2: Error: no such instruction: `extern puts'
Hors ligne
#7 Le 05/02/2010, à 11:42
- Nasman
Re : Comment utiliser ld avec puts?
extern puts est la syntaxe de nasm. Je ne connais pas celle de as.
Peux être peux tu faire la même chose en C et demander une sortie en asm avec gcc. Tu auras alors un programme en assembleur as - avec peut être la directive qui va bien.
- et peut être man as
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#8 Le 05/02/2010, à 23:19
- n3o51
Re : Comment utiliser ld avec puts?
nasm -f elf hello1.asm ; ld -s hello1_asm.o -o hello1_asm
Welcome to the real world
________________________________
Hors ligne