数组
IDA有较强的数组聚合能力,可以将一串数据声明变成一个反汇编行,按数组的形式显示。例子如下
其中407030h指向一个数组,以下是未识别的数组。
我们可以通过打开数组排列调整窗口,来调整显示。
设置1*3后如下。
结构体
1.创建结构体
对于一些常见的文件类型,ida会自动加载其对应的类型库。这些类型库中有相应的结构体,分析代码时用于直接引用。可以通过如下方法加载类型库
默认情况下,ida会加载这些常用的结构。也可以按insert键,单击cancel使得程序结构体数据结构显示。在WNCLASSA结构一行双击,展开结构,在程序代码相应位置会直接以结构体的形式展示。
书中提供了一种方法:我们在写C程序的时候所定义的结构体往往一目了然,而到了反汇编分析的时候,分析工具由于没有定义结构体会生成让人看不懂的代码。我们在ida中可以创建结构体并实现从现有数据实现数据转移。
2.导入结构体
上面已经介绍了手工方式建立各类结构,操作并不方便。从c文件头中导入结构才是最好的选择。积累自己建立的头文件。
枚举类型
下面一段程序在进行ida反汇编后,得到一些没有意义的数字。
可以用枚举类型来表示这些数字。
我们可以使0表示Monday,1表示Tuesday,并以此类推。
这样就可以直接显示枚举的成员
变量
在如下的一段反汇编代码中,参数传递不够明确,因此可以改善
ida会自动识别哪些参数被放到了栈
ida会给这些传递的变量有意义的名字。在任何函数栈上双击,打开站窗口,就可以显示各结构成员。