我是靠谱客的博主 鲜艳冰棍,这篇文章主要介绍Push, Pop, call, leave 和 Ret 指令图解,现在分享给大家,希望可以做个参考。

指令图解:最近在研究如何在程序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,内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部