- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
13.2 使用 loadint 扩充预定义注释
在第 7 章中,我们介绍了 IDA 的“自动注释”概念,如果启用了它,IDA 将显示描述每个汇编语言指令的注释。如下所示是这种注释的两个例子:
.text:08048654 lea ecx, [esp+arg_0] ; Load Effective Address .text:08048658 and esp, 0FFFFFFF0h ; Logical AND
这些预定义注释保存在/ida.int 文件中,这些注释主要按 CPU 类型排序,其次按指令类型排序。如果启用自动注释,IDA 会在 ida.int 文件中搜索与每一条指令有关的注释,如果找到,它将在反汇编代码清单的右侧显示这些注释。
使用 loadint
1 实用工具可以修改现有的注释,或在 ida.int 文件中添加新注释。如我们前面讨论的其他附加实用工具一样, loadint
发行版自带的 readme.txt 文件介绍了 loadint
的用法。 loadint
发行版中还包含大量的.cmt 文件,它们是描述 IDA 的所有处理器模块的预定义注释。修改现有注释的过程非常简单,首先确定与处理器关联的注释文件(如用于 x86 处理器的 pc.cmt 文件),其次修改其中的注释,运行 loadint 重新创建 ida.int 注释文件,最后将得到的 ida.int 文件复制到 IDA 主目录中,下次启动时,IDA 将从这个目录加载新建的 ida.int 文件。一段重建注释数据库的简单代码如下所示:
1. 当前版本为 loadint61.zip。
$ ./loadint comment.cmt ida.int Comment base loader. Version 2.04. Copyright (c) 1991-2011 Hex-Rays 17566 cases, 17033 strings, total length: 580575
你希望进行的更改包括:修改现有注释,或为没有注释的指令添加注释。例如,在 pc.cmt 文件中,为使在启用自动注释时不会生成过多注释,IDA 并没有为几个比较常见的指令添加注释。下面的代码行取自 pc.cmt 文件,它们证实,默认情况下,x86 mov
指令并不生成注释:
NN_ltr: "Load Task Register" //NN_mov: "Move Data" NN_movsp: "Move to/from Special Registers"
如果你希望为 mov
指令添加注释,你可以删除中间一行注释,并根据详细步骤重建注释数据库。
loadint
文档资料中的一条提示指出:loadint 必须能够找到 IDA 发行版自带的 ida.hlp 文件。如果你收到以下错误消息,应该将 ida.hlp 文件复制到 loadint 目录,并重新运行 loadint 。
$ ./loadint comment.cmt ida.int Comment base loader. Version 2.04. Copyright (c) 1991-2011 Hex-Rays Can't initialize help system. File name: 'ida.hlp', Reason: can't find file (take it from IDA distribution).
此外,你可以对 loadint
使用 -n
选项,指定 <IDADIR>
的位置,如下面的命令行所示:
$ ./loadint -n comment.cmt ida.int
comment.cmt 文件是 loadint
的主输入文件,这个文件的语法记录在 loadint
文档中。简言之,commnet.cmt 创建处理器类型与相关的注释文件之间的映射。特定于处理器的注释文件则反过来指定特定指令与每条指令的相关注释文本之间的对应关系。整个过程由几个枚举(C 风格枚举)常量控制,它们定义所有处理器类型(位于 comment.cmt 文件中)以及每个处理器可能使用的所有指令(位于 allins.hpp 文件中)。
如果你希望给一个全新的处理器类型添加预定义注释,这个过程可能会比仅修改现有的注释要复杂一些。而且,这个过程还与创建新的处理器模块(参见第 19 章)直接相关。如果不深入分析处理器模块,要给一个全新的处理器类型添加注释,首先,你需要在 allins.hpp 文件中创建一个新的枚举常量集合(与处理器模块共享),由它为指令集中的每条指令定义一个常量;其次,必须创建一个注释文件,将每个枚举指令常量与相关的注释文本关联起来;最后,必须为你的处理器类型定义一个新常量(同样,与处理器模块共享),并在 comment.cmt 中创建一个条目,将处理器类型与相关的注释文件对应起来。完成这些步骤后,必须运行 loadint ,建立一个新的注释数据库,并将新的处理器类型及相关注释添加到其中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论