返回介绍

13.2 使用 loadint 扩充预定义注释

发布于 2024-10-11 21:05:44 字数 2476 浏览 0 评论 0 收藏 0

在第 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文