在IDA中,枚举(来自“enumeration”)是一组具有数值的符号常量。它们可以被视为C/C++枚举类型和预处理器定义的超集。
这些常量可以在反汇编或伪代码中使用,以符号名称替换特定数字或其组合,使列表更易读和理解。
手动创建枚举
枚举视图是IDA默认桌面布局的一部分,但也可以通过“视图 > 打开子视图 > 枚举”或快捷键Shift
–F10
打开。
要添加新枚举,请使用上下文菜单中的“添加枚举...”或快捷键Ins
(在Mac上为I
)。
在对话框中,您可以指定符号常量的名称、宽度(以字节为单位)和数值基数。
一旦创建了枚举,您就可以开始向其中添加常量。为此,请使用上下文菜单中的“添加枚举成员...”或快捷键N
。
一个枚举可以有多个具有相同值的常量,但所有常量的名称必须是唯一的。
通过本地类型创建枚举
本地类型视图也可以用于创建枚举。只需按Ins
,在文本框中编写C语法定义,然后点击确定。
要使枚举在枚举视图中可用,以便在反汇编中使用,请使用上下文菜单中的“同步到idb”或双击新添加的枚举类型。
从类型库导入枚举
与其从头创建枚举,您还可以利用IDA附带的类型库,其中包括系统头文件和SDK中的枚举。如果您知道枚举或其成员之一的名称,可以检查它们是否存在于已加载的类型库中。为此,请使用“添加枚举”对话框中提供的两个链接按钮之一:
如果您点击其中一个,IDA将显示当前加载的类型库中所有可用的枚举或成员(符号)列表。
如果您事先知道标准枚举名称,只需在“添加枚举”对话框中输入它,IDA将在加载的类型库中找到匹配项时自动导入。
使用枚举
枚举可以用来用符号常量替换反汇编或伪代码中的(几乎)任何数值。这可以通过数字上的上下文菜单完成:
或者按快捷键M,显示一个选择器:
枚举成员列表会自动缩小到与反汇编/伪代码中的数字匹配的那些。
要查看转换后符号常量的值,将鼠标悬停在其上:
学习资源
立即关注【二进制磨剑】公众号
原文始发于微信公众号(二进制磨剑):IDA技巧(99)IDA 枚举类型
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论