bonjour,
lorsque j’exécute le programme "bonjour tout le monde" compilé avec as, j'ai ce message d'erreur:
as --64 btlm.s
chmod +x a.out
./a.out
bash: ./a.out : impossible d'exécuter le fichier binaire : Erreur de format pour exec()
file a.out
a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
avec gcc, j'ai ce message:
gcc -o btlm btlm.s
/usr/bin/ld: /tmp/ccAqmp67.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
gcc -fPIE -o btlm btlm.s
/usr/bin/ld: /tmp/ccVK2DZq.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
voici le code:
.data # directive de création d'une zone de donnée
# adresse symbolique pointant sur la chaîne:
btlm:
.string "Bonjour tout le monde!\n"
.text # directive de création d'une zone
# d'instructions
.globl main # directive de création d'une étiquette
# de portée globale
main: # main est l'adresse de début du programme
movl $4,%eax # sélection de la fonction write du système
movl $1,%ebx # dernier paramètre de write : stdout
movl $btlm,%ecx # premier paramètre de write : l'adresse de
# la chaîne de caractères à afficher
movl $23,%edx # le nombre de caractères à afficher : 23
int $0x80 # appel de l'interruption 128 > GNU/Linux
movl $1,%eax # sélection de la fonction exit du système
xorl %ebx,%ebx # mise à zéro du 1er paramètre en utilisant
# xor, c'est à dire ou exclusif
int $0x80 # appel de l'interruption 128 > GNU/Linux
ret
quelqu'un a une idée?