- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
20.2 RTTI 实现
在第 8 章中,我们讨论了 C++ RTTI(运行时类型识别),并指出:编译器实现 RTTI 时并没有标准的方法。至于如何自动识别二进制文件中与 RTTI 有关的结构,IDA 的这项功能同样因所使用的编译器而异。毫不奇怪,对于使用 Borland 编译器编译的二进制文件,IDA 在这方面的功能最为强大。对自动识别微软 RTTI 数据结构感兴趣的读者,可以尝试使用 IDA Palace1 中 Igor Skochinsky 的 IDC 脚本或者 Sirmabus2 中的 Class Informer 插件,这将在第 23 章中深入讨论。
1. 参见 http://old.idapalace.net/idc/ms_rtti.zip 。
2. 参见 http://www.openrce.org/blog/browse/sirmabus 。
要了解某一特定编译器如何嵌入 C++ 类的类型信息,一种简单的方法是编写一个利用包含虚函数的类的简单程序。编译该程序后,你就可以将得到的可执行文件加载到 IDA 中,并搜索包含程序所使用的类的名称的字符串。无论使用什么编译器构建二进制文件,RTTI 数据结构始终会包含一个指向字符串的指针,该字符串则包含它所代表的类的名称。使用数据交叉引用,你将可以定位一个指向这类字符串的指针,并在那里找到候选的 RTTI 数据结构。最后,你需要将候选的 RTTI 结构与相关类的虚表关联起来。要完成这个任务,最好的办法是从候选的 RTTI 结构回溯数据交叉引用,直到到达一个函数指针表(虚表)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论