组装,尝试推送%ebp时出错

时间:2015-08-08 00:12:24

标签: assembly x86

我已尝试过这段代码,只是为了将%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

1 个答案:

答案 0 :(得分:4)

在func定义中

    func:
    pushl %ebp 
    popl %ebp  ---> so ret instruction gets the right return address.    
    ret

你没有弹出ebp,所以ret指令返回堆栈顶部的地址,在这种情况下是ebp,而不是返回地址。 这个链接可能会有所帮助。 Guide to assembly