您的位置:首页 > 运维架构

Push, Pop, call, leave 和 Ret 指令图解

2014-05-14 14:32 274 查看
指令图解:最近在研究如何在程序crash定位出错函数,补充的计算机系统基础知识。此篇主要是介绍IA32中重要的几个汇编指令(以AT&T为例),详情请参考《深入计算机系统2》第三章第三节。

PUSH 和 POP

指令的汇编格式:PUSH SRC ;POP DST

指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH 等价于:

subl $4, %esp

movl %ebp (%esp)

POP 等价于:

movl (%esp), %ead

addl $4, %esp



CALL,RET和LE***E

CALL指令的步骤:首先是将返回地址(也就是call指令要执行时EIP的值)压入栈顶,然后是将程序跳转到当前调用的方法的起始地址。执行push和jump指令。

RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序。

LE***E指令是将栈指针指向帧指针,然后POP备份的原帧指针到%EBP。



Leave等价于:

movl %ebp %esp

popl %ebp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: