在汇编:非法指令的gcc汇编
.globl _test
_test:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
pushl %eax
call printf
popl %ebp
ret
从调用C
main()
{
_test("Hello");
}
编译:
GCC -m32 -o测试test.c的test.s
这代码有时会给我非法的指令,并且在其他时候会导致段错误 在gdc我总是得到非法的指令,这只是一个简单的测试,我有一个更大的程序工作,突然没有上诉原因后停止工作,现在我总是得到这个错误,即使我从头开始像上面。
我已经缩小到pushl%eax & call printf,如果我注释掉那些代码运行良好的行。
任何想法? (我正在我的大学linux群集上运行该程序,所以我没有更改任何设置..)
在通话结束后,您忘了从堆栈中删除参数到'printf()'。你的'popl%ebp'会把错误的东西关掉,你的'ret'试图跳到错误的位置 - 因为堆栈里有一个字比你预期的多。 – 2012-05-29 17:05:28