作者zha0 (zha0)
站内CSIE_ASM
标题Re: [问题] ret
时间Fri Nov 24 11:01:11 2006
※ 引述《braveforever (braveforever)》之铭言:
: 当procedure执行到ret n 时,
: 投影片上说会有两个动作,先把 EIP=SS:ESP ---(1)
这里因该打 EIP=SS:[ESP] 会比较好一点.
因为是取 ESP 所指向的记忆体内容
: 然後 ESP=ESP+4+n ---(2)
: 但是在执行(1)之後,CPU下一个执行的指令该为EIP所指到的那一行,
: 那麽(2)就不会被执行到?!
(2) 还是会被执行到的,因为那是 CPU 自己帮你作掉的动作,
而且那个 n 是指 Byte 如果你今天是在 32 bits 的环境下,
那他就是 4 的部数,也就是看你在 CALL 指令的上面要还原多少。
你可以用 Ollydbg 去看看 Win32 API 的作法,__stdcall 的这种方式,
都是使用 ret n 的方法在清参数的 .
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 124.8.99.35