挂钩/折叠虚拟function

我一直在试图正确地钩住/绕过一个类对象的虚拟函数,我已经成功地调用了一个不同的函数,但是我必须做一些关于如何传递this关键字的不正确的东西到function。

我读了一篇关于以类似的方式挂钩D3D函数的文章,并且提到编译器会把int Class::method(int)这样的函数转换成int method(Class* this, int) ,但是如果我把地址在vtable中定义了这样的函数,“this”的地址是不正确的,所以这可能是不正确的。

编译器如何规划成员函数,是否可以用非成员函数的forms表示成员函数,以便我可以在vtable中将地址设置为这样的函数,并能够引用适当的对象?

你需要定义你的函数作为thiscall 。 它通过this ecx寄存器。 你这样做的方式,函数期望在堆栈上,并读取可能属于另一个论点的错误值。