通用Thunk
2010-07-15 20:45:23 来源:WEB开发网核心提示:设计 StdToStd让我们由以下3步分析:1. 调用者如何准备参数和返回地址?一般的说,一个使用__stdcall 的普通C函数会将参数从右向左依次压栈,通用Thunk(6),我们假设它使得栈增长了 N,注意:N并不总等于参数数目×4!CALL 指令将返回地址压栈,使得栈再增长4参数 m <-ESP
设计 StdToStd
让我们由以下3步分析:
1. 调用者如何准备参数和返回地址?
一般的说,一个使用__stdcall 的普通C函数会将参数从右向左依次压栈。我们假设它使得栈增长了 N。注意:N并不总等于参数数目×4!
CALL 指令将返回地址压栈,使得栈再增长4
参数 m <-ESP +4 +N
参数 m-1
…
参数 1 <- ESP + 4
返回地址 <- ESP
它将平衡堆栈的工作交给被调用者。(使用RET N)
2. 被调用者如何得到参数与返回地址?(它希望何种方式?)
一个和上述普通C函数具有相同参数列表,使用__stdcall的成员函数,希望参数,返回地址和this指针像这样准备 :
参数 m <- ESP + 8 + N
参数 m-1
…
参数 1 < -ESP + 8
this < -ESP +4
返回地址 <-ESP
更多精彩
赞助商链接