码迷,mamicode.com
首页 > 其他好文 > 详细

汇编中retn 4的含义详析

时间:2014-08-29 14:30:07      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:sp   c   bs   函数   ip   r   总结   调试   而不是   

retn 4

是个函数返回指令。

以前一直纠结这个retn的寄存器操作顺序,手头正好在调试,详细跟了一下,豁然开朗,特分享。
先假设个环境:
retn 4未执行时,ESP=0013feb8;EIP=5d1d8b97;而[0013feb8]=7c974a19


执行retn 4之后:

首先
EIP=[0013feb8]
:即此时cpu先指挥EIP获取到栈中0013feb8起4个字节的值7c974a19,作为retn跳转的目标,然后cpu跳过去等着执行7c974a19地址下的命令。
此时,EIP=7c974a19

然后

因为retn 4里面有个4,此时cpu才让ESP栈+4+4,使得ESP=0013fec0。

为啥出现两个+4?另一个+4的原因在于:如果命令是retn,而不是retn 4,那ESP将当前值(0013feb8)给了EIP之后,自动会来一个+4,即ESP会为0013febc。

总结下来:

retn操作:先eip=esp,然后esp=esp+4

retn N操作:先eip=esp,然后esp=esp+4+N

 

汇编中retn 4的含义详析

标签:sp   c   bs   函数   ip   r   总结   调试   而不是   

原文地址:http://www.cnblogs.com/taonull/p/3944745.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!