2011-04-29 68 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,即能產生良好的段錯誤!