根据OllyDbg显示,分析retn 10执行完后,CPU返回的地址和ESP值

在这里插入图片描述
retn 10相当于pop EIP add ESP,10 两条语句的功能

(1) 0x004026B3

详解:CPU返回地址应当是retn 10指令执行后EIP的值,也就是父亲函数的 call指令后面一条指令 的地址。画面中看不到父亲函数的地址和汇编代码,所以把目光聚焦于EIP。retn 10的执行过程中,EIP从栈顶弹出,所以它应该是retn 10执行前ESP所指向的内容。即:EIP(new)=[ESP](old)。而指令执行前ESP的值在画面中寄存器区可以读出:0x0012F600,ESP所指向的内存单元的内容(0x0012F600起始的内存地址的数据)在内存区可以读出:0x004026B3。

(2) ESP=0x0012F614

详解:画面中各寄存器的值是执行retn 10指令前的状态,此时ESP(old)=0012F600。pop EIP使得ESP+0x4,add ESP,10使得ESP+0x10(注意是16进制的10而不是十进制下的10,这个从retn 10的十六进制编码为C2 1000可以看出来)。所以retn 10执行完成后,ESP变为0x0012F600+0x04+0x10=0x0012F614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值