2011-04-29 71 views
3

我正试图组装一小段x86代码。我在32位机器上,并且写下了以下代码。它应该只是将值添加到eax中,然后返回。我意识到不会有任何输出。当我编译这个使用Segfault与x86程序集

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 

回答

0

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

4

不是你的,但你的第二个MOVL

movl 0,%eax 

没有使用字面$0但地址0,即能产生良好的段错误!