我到网上找了段简单的Thunk代码,用于将类的成员函数变成回调函数,而且写代码测试时没问题,核心代码如下:
void Init(CommonMemberFun method, const T *pThis)
{
union uPtr { BYTE *byte; DWORD *dword; CommonMemberFun method; }; uPtr pAsm86;
pAsm86.byte = asm86;
uPtr pFn;
pFn.method = method; *pAsm86.byte++      =   0x58; //pop eax
*pAsm86.byte++      =   0x68; //push pThis
*pAsm86.dword++     =   (DWORD)pThis;
*pAsm86.byte++      =   0x50; //push eax
*pAsm86.byte++      =   0xE9; //jmp method
*pAsm86.dword++     =   (DWORD)pFn.dword - (DWORD)(this+1); FlushInstructionCache(GetCurrentProcess(), this, sizeof(*this));
}今天突然想把这段代码用在创建线程时的回调函数的问题上,能运行,能达到效果,可有个不大不小的瑕疵,
结束线程时,居然造成了我的回调函数的代码堆栈除了问题。虽然继续运行还能运行下去。
哪位大牛能不能指点一二,是不是线程的回调函数不一样啊,不然为什么我没看到过有人把Thunk应用到这里呢。