如何在运行时恢复/定位非虚拟类方法?

逆向工程 拆卸 C++ 动态分析
2021-06-16 17:47:06

我知道如何通过抓取对象的 RTTI 来查找和挂钩虚拟方法。我找不到有关非虚拟类方法的足够信息。

  1. 无论如何在运行时识别非虚拟类方法?

  2. 我可以使用类的符号名称在运行时恢复有关它的任何信息吗?

1个回答

没有万无一失的方法来做到这一点。非虚拟方法看起来与普通函数完全一样,只是它们采用隐式“this”指针。如果您正在处理 Visual C++ 编译程序,那么它可能会更明显一些,因为它通常使用thiscall调用约定,因此您只需要注意实例地址在函数入口处的 ecx 中的情况。有关更多详细信息,请参阅我的文章

当然,如果您有符号,那么这很容易 - 只需检查classname::demangled 函数名称中的前缀。