我知道如何通过抓取对象的 RTTI 来查找和挂钩虚拟方法。我找不到有关非虚拟类方法的足够信息。
无论如何在运行时识别非虚拟类方法?
我可以使用类的符号名称在运行时恢复有关它的任何信息吗?
我知道如何通过抓取对象的 RTTI 来查找和挂钩虚拟方法。我找不到有关非虚拟类方法的足够信息。
无论如何在运行时识别非虚拟类方法?
我可以使用类的符号名称在运行时恢复有关它的任何信息吗?
没有万无一失的方法来做到这一点。非虚拟方法看起来与普通函数完全一样,只是它们采用隐式“this”指针。如果您正在处理 Visual C++ 编译程序,那么它可能会更明显一些,因为它通常使用thiscall调用约定,因此您只需要注意实例地址在函数入口处的 ecx 中的情况。有关更多详细信息,请参阅我的文章。
当然,如果您有符号,那么这很容易 - 只需检查classname::demangled 函数名称中的前缀。