今天看不懂了程序员2003第六期 的thunk机制问题 请教各位。(等待)
fvv 2003-07-14 01:08:02 不用研究代码。书上的代码是说明怎样通过thunk机制。实现回调函数怎样封装成类的成员函数。不避免很多全局函数出现。满足O-O思想。
在代码中出现了很多象
m_mov = 0xB8;
m_this = (DWORD)pThis;
m_xchg_push = 0x50240487;
m_jmp = 0xE9;
这些0x50240487;0xE9;是怎么来的,写程序的人怎么才能知道这些。怎么才能了解这方面的内容;看了很多VC的书从没看到这方面的内容。什么书籍讲述这些知识。很多VC++底层机制哪种书籍讲述?
////书籍部分代码
template <class T>
class CAuxStdThunk
{
BYTE m_mov; // mov eax, %pThis
DWORD m_this; //
DWORD m_xchg_push; // xchg eax, [esp] : push eax
BYTE m_jmp; // jmp func
DWORD m_relproc; // relative jmp
public:
typedef void (__stdcall T::*TMFP)();
void InitThunk(TMFP method, const T* pThis)
{
union {
DWORD func;
TMFP method;
} addr;
addr.method = method;
m_mov = 0xB8;
m_this = (DWORD)pThis;
m_xchg_push = 0x50240487;
m_jmp = 0xE9;
m_relproc = addr.func - (DWORD)(this+1);
FlushInstructionCache(GetCurrentProcess(), this, sizeof(*this));
}
FARPROC GetThunk() const {
_ASSERTE(m_mov == 0xB8);
return (FARPROC)this; }
};