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

根据OD显示,分析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