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

通用Thunk

 2010-07-15 20:45:23 来源:WEB开发网   
核心提示:宏 CONST CODE_FIRST(byte,POP_EAX,0x58) 在StdToStd.h 中,将被替换成: “const byte POP_EAX;”(宏THUNK_MACHINE_CODE_IMPLEMENT没有定义)在StdToStd.cpp 中,通用Thunk(8),将被替换成:

宏 CONST CODE_FIRST(byte,POP_EAX,0x58) 在StdToStd.h 中,将被替换成: “const byte POP_EAX;”

(宏THUNK_MACHINE_CODE_IMPLEMENT没有定义)

在StdToStd.cpp 中,将被替换成: “:POP_EAX(0x58)”

(宏THUNK_MACHINE_CODE_IMPLEMENT 被定义)

在StdToStd.cpp中,宏 CODE_FIRST 于CODE 的不同之处在于 CODE 被替换为 “, 某某” 而不是 “: 某某” .使得初始化列表合法。

宏(macro) STD_TO_STD_CODES() 的注释(comment) 详细说明了这个类是如何工作的。

设计 ThisToCdecl

让我们还是依照那3个步骤分析:

1、当一个使用__cdecl 的普通C函数调用时,编译器从右向左压入参数,我们假设这使得栈增加N。CALL指令将返回地址压栈,使得栈再增加4。

堆栈就像这样:

参数 m <- ESP + 4 + N

参数 m-1

参数 1 <- ESP + 4

返回地址 <- ESP

它使用 ADD ESP,N 平衡堆栈。

2、当一个和上述C普通函数有同样参数列表,使用__thiscall 的成员函数将要被调用时,它希望参数已经被从右向左压入,而且ECX保存着this指针。

参数 m <- ESP + 4 + N

参数 m-1

参数 1 <- ESP + 4

返回地址 <- ESP

ECX : this

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

Tags:通用 Thunk

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