2011-04-29 4 views
3

J'essaye d'assembler un petit morceau de code x86. Je suis sur une machine 32 bits et j'ai écrit le code suivant. Cela devrait juste ajouter des valeurs dans eax et ensuite revenir. Je réalise qu'il n'y aura pas de sortie. Quand je compile cela en utilisantSegfault avec assemblage x86

gcc main.S -o main

Il compile sans erreur. Mais quand je lance des erreurs de segmentation (gdb prétend qu'il se sépare de la première instruction movl). main.S contient le code suivant. Qu'est-ce que je fais mal?

.text 
.globl main 
main: 
pushl %ebp 
movl  %esp, %ebp 
movl 0, %eax 
addl $3, %eax 
addl $3, %eax 
leave 
ret 

Répondre

0

AT & syntaxe T me fait mal aux yeux, mais le code semble bien pour moi. Que se passe-t-il si vous utilisez Entrée au lieu des deux premières instructions ou si vous supprimez complètement la configuration de la pile?

4

pas votre première, mais votre deuxième movl

movl 0,%eax 

est de ne pas utiliser la $0 littérale mais l'adresse 0. Cela pourrait produire une bonne segfault!

Questions connexes