挂钩/绕行虚拟功能

时间:2011-09-11 07:28:04

标签: windows hook virtual-functions

我一直试图在一个类对象中正确地挂钩/绕过一个虚函数,并且我已经成功地调用了一个不同的函数,但是我必须做一些关于{的方法不正确的事情。 {1}}关键字传递给函数。

我读了一篇关于以类似的方式挂钩D3D函数的文章,它提到编译器会将诸如this之类的函数转换为int Class::method(int),但是如果我用vtable替换vtable中的地址如此定义的函数,'this'的地址不正确,因此可能不正确。

编译器如何布局成员函数,是否可以用非成员函数形式表示它,以便我可以将vtable中的地址设置为这样的函数并能够引用相应的对象?

1 个答案:

答案 0 :(得分:1)

您需要将您的功能定义为thiscall。它在this寄存器上传递ecx。你完成它的方式,函数在堆栈上期待this并读取可能属于另一个参数的错误值。