当逆向工程从 C++ 编译的二进制文件时,经常会看到许多对vtables 中函数指针的间接调用。要确定这些调用将导致何处,必须始终了解虚函数中this指针所期望的对象类型,有时还需要绘制出类层次结构。
this
在静态分析的上下文中,您使用哪些工具或注释技术使反汇编中的虚函数更易于遵循?欢迎所有静态分析工具包的解决方案。
我在 2011 年的侦察(“实用 C++ 反编译”)上就这个确切的主题发表了演讲。提供幻灯片和视频(镜像)。
基本方法很简单:将类表示为结构,将 vtable 表示为函数指针的结构。我描述了一些技巧,它们允许您为同一层次结构中的类处理继承和不同的虚表。这些技巧也在这个博客上有所描述;我不确定它是基于我的谈话还是独立的工作。
我要做的另一件事是向 vtable 结构中的每个插槽添加一个可重复的注释,其中包含实现的地址。这允许您在将结构应用于 vtable 插槽加载时快速跳转到实现: