Method6:使用类的非静态函数作为回调(采用thunk的方法2)
在上面的实现过程中,可以看出来主要的部分就是这里:
bMovEcx = 0xB9;
dwThis = (DWORD)pThis;
bJmp = 0xE9;
dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)));
意思就是Move Ecx pThis; 即把this指针保存到了ECX的寄存器,JMP dwRealProc;就是跳转到成员函数的地址并进行调用。
对于调用类的非静态方法时中需要传入this指针的问题,我们再找一种方法进行解决,上面的类方法使用的是默认的thiscall的调用规则,下面我们使用stdcall的方式,也就是不使用ecx传递