挂钩非虚拟类成员函数

时间:2014-01-17 22:18:13

标签: c++ windows hook

我设法挂钩了我想要的一切(API函数,虚拟方法,“标准”函数),但我想知道如何挂钩非虚拟类成员函数(方法)。 要挂钩虚拟方法,您只需要获取VTable并对其进行修补(或复制,修改它并更改VPointer)。但是,当方法非虚拟时,没有VTable。

首先,如何从名称中获取我要挂钩的方法的地址?我无法使用GetProcAddress(),因为未导出该函数。唯一的方法似乎是在内存中搜索与该函数对应的字节模式。 然后,一旦我得到地址,我该如何挂钩?使用基本方法(JMP)?如果我只想挂钩一个实例怎么办?我想我会检查我的挂钩功能:如果它是正确的实例,那么就要做必须完成的事情,否则只需执行它而不做任何其他事情。

实际上我正在寻找更好的解决方案,因为我认为上面的解决方案可行,但它们不是很“整洁”,是吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

大多数情况下,根本无法转移静态解析的功能。您是否听说过名为 inlining 的优化?即使没有发生这种情况,COMDAT折叠也可能使您感兴趣的功能完全不可能。

强烈推荐阅读:Raymond Chen's "Why does the debugger show me the wrong function?"