WEB开发网
开发学院软件开发VC 通用Thunk 阅读

通用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

上一页  1 2 3 4 5 6 7 8 9 10 11  下一页

Tags:通用 Thunk

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接