我已尝试过这段代码,只是为了将%ebp寄存器压入堆栈 但它似乎以分段错误结束,因为某些未知原因该程序只需要返回50
.section .data
.section .text
.globl _start
_start:
call func ## fails here
movl $50,%ebx
movl $1,%eax
int $0x80 ## terminate program
.type func,@function
func:
pushl %ebp
ret
答案 0 :(得分:4)
在func定义中
func:
pushl %ebp
popl %ebp ---> so ret instruction gets the right return address.
ret
你没有弹出ebp,所以ret指令返回堆栈顶部的地址,在这种情况下是ebp,而不是返回地址。 这个链接可能会有所帮助。 Guide to assembly