J'utilise ubuntu 64 bits et j'essaie d'exécuter un fichier .asm sur MSNA. Mais il renvoie cette erreur lorsque j'essaie d'exécuter le code suivant. Qu'est-ce iM essayer de faire est de construire un exécutable en compilant (ou assemblage) fichier objet à partir de la source $ nasm -f elf hello.asm
, puis après a créé le fichier hello.o
est la production de fichier exécutable lui-même à partir du fichier objet en invoquant linkerErreur lors de la tentative d'exécution du fichier .asm sur NASM sous Ubuntu
$ ld -s -o hello hello.o
Cette va enfin construire bonjour exécutable.
que je suis ce tutoriel http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html
Erreur:
architecture i386 du fichier d'entrée `hello.o » est incompatible avec i386: sortie x86-64
code:
section .data ;section declaration
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
section .text ;section declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our string to stdout
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
;and exit
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
@psyhclo: Est-ce que ce travail pour vous? –
Ce n'est pas vraiment la bonne approche, car l'assemblage que l'OP écrit devrait également être modifié (par exemple, les 32 bits supérieurs de '% rax','% rbx' etc. doivent être effacés avant le système appel). – caf
Oui, @caf, vous avez probablement raison à ce sujet. Moi, je préférerais l'approche du changement de code puisque je cours en 64 bits mais je peux voir que la création d'un exécutable 32 bits serait préférable dans certaines circonstances. Votre réponse fournit probablement la version minimale d'effort de faire fonctionner les choses, c'est probablement la meilleure façon d'obtenir un tutoriel. Donc +1 pour ça. – paxdiablo