Push, Pop, call, leave 和 Ret 指令图解
2017-05-01 11:04
1076 查看
转自:http://blog.csdn.net/striver1205/article/details/25695437
指令图解:最近在研究如何在程序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和LEAVE
CALL指令的步骤:首先是将返回地址(也就是call指令要执行时EIP的值)压入栈顶,然后是将程序跳转到当前调用的方法的起始地址。执行push和jump指令。
RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序。
LEAVE指令是将栈指针指向帧指针,然后POP备份的原帧指针到%EBP。
Leave等价于:
movl %ebp %esp
popl %ebp
指令图解:最近在研究如何在程序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和LEAVE
CALL指令的步骤:首先是将返回地址(也就是call指令要执行时EIP的值)压入栈顶,然后是将程序跳转到当前调用的方法的起始地址。执行push和jump指令。
RET指令则是将栈顶的返回地址弹出到EIP,然后按照EIP此时指示的指令地址继续执行程序。
LEAVE指令是将栈指针指向帧指针,然后POP备份的原帧指针到%EBP。
Leave等价于:
movl %ebp %esp
popl %ebp
相关文章推荐
- Push, Pop, call, leave 和 Ret 指令图解
- 汇编指令push,mov,call,pop,leave,ret建立与释放栈的过程
- 查找pop pop ret call dword ptr [esp+nn]指令的方法
- push、pop指令
- push、pop指令
- 8086汇编语言自学经验分享 push,pop指令执行时,sp怎么变
- push、pop指令
- 第十章 Call 和 Ret 指令
- push、pop指令
- jcxz+call+ret 指令实验
- AT&T汇编指令enter、leave、call、ret
- [置顶] 4000 2017-11-15 深刻理解堆栈及PUSH POP指令
- CALL 和 ret 指令
- call、ret、retf 指令详解
- call 和 ret 指令
- 跳转指令 jmp、call、ret、retf
- glPushMatrix 和glPopMatrix图解 ----求别笑
- PUSH、POP和XCHG指令
- 执行retn、call、leave指令的时候,esp和eip的变化情况
- 执行retn、call、leave指令的时候,esp和eip的变化情况