使用x86程序集的Segfault

时间:2011-04-29 15:45:48

标签: assembly x86

我正在尝试组装一小段x86代码。我在32位机器上,我写了以下代码。它应该只是将值添加到eax然后返回。我意识到不会有任何输出。当我使用

编译它时

gcc main.S -o main

它编译没有错误。但是当我运行它时出现seg错误(gdb声称它在第一个movl指令上有段错误)。 main.S中包含以下代码。我做错了什么?

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

2 个答案:

答案 0 :(得分:4)

不是你的第一个,而是你的第二个movl

movl  0,%eax

不是使用文字$0而是使用地址0.这可能会产生一个好的段错误!

答案 1 :(得分:0)

AT& T语法让我的眼睛受伤,但代码对我来说很好看。如果使用Enter而不是前两条指令,或者完全取出堆栈帧设置会发生什么?