En assembleur:assembleur gcc instruction illégale
.globl _test
_test:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
pushl %eax
call printf
popl %ebp
ret
Appel de c
main()
{
_test("Hello");
}
Compile:
gcc -m32 test.c test -o test.s
Cette le code me donne parfois des instructions illégales et des erreurs de segment d'autres fois. En gdc je reçois toujours des instructions illégales, c'est juste un test simple, j'ai eu un programme plus grand qui fonctionnait et soudainement après aucune raison apparente a cessé de fonctionner, maintenant je reçois toujours cette erreur même si je recommence comme ci-dessus.
Je l'ai réduit à pushl% eax & appel printf, si je commente sur ces lignes le code fonctionne très bien.
Des idées? (Je cours le programme au cluster linux de mon université, donc je n'ai pas changé les paramètres ..)
Vous avez simplement oublié de supprimer l'argument 'printf()' de la pile après le retour de l'appel. Votre 'popl% ebp' enlève la mauvaise chose, et votre' ret' essaie de sauter au mauvais endroit - parce qu'il y a un mot de plus sur la pile que prévu. –