今天在群里有人问了个关于IDA的问题:
Q:导出表中的D代表了什么
以我个人理解,这应该是导出的变量,但IDA标识的“D”代表了什么?
一位大佬给出了答案,记录在此
原文
- F (Function): regular function, which is not a library function.
- L (Library): library function that can be recognized with different signatures that are part of IDA. If the matching signature is not found, the name is labeled as a regular function.
- I (Imported): imported name from the shared library. The code from this function/name is not present in the executable and is provided at run time, whereas the library function is embedded into the executable.
- C (Code): named code that represent program locations that are not part of any function, which can happen if the name is a part of the symbol table, but the executable never calls this function.
- D (Data): named data locations that are usually global variables.
- A (Ascii): ASCII string data that represents a string terminated with a null byte in the executable.
由于该文章所介绍的IDA版本有些陈旧,在IDA HELP中找到了解释
个人理解:
图标为’f’的:方法。
a.无底色F图标 :普通方法
样式 :
b.浅蓝色F图标: 库方法(IDA识别,比如一些库静态编译进程序,IDA通过签名识别出)
样式 :
c.紫色F图标 : 导入方法
样式 :
[^颜色说明]: 后面的颜色规则均与这里一致:浅蓝色为IDA识别的库 无底色为常规,紫色为导入,不再复述
图标为’i’的: 代码片段(未发现有C的图标,推测新版本用i表示instruction 有了解的欢迎勘误)
a.无底色/浅蓝色 i 图标 : IDA识别的代码/库代码片段
样式 :
图标为’D’的 : 数据,在导出表中的数据一般为导出的全局变量
a. D图标 :
图标为箭头的: External ,一般为导入数据,name指向导入表内容
a. 箭头图标 :
图标为’A’的:文本(IDA会在文本前面加一个a保证Name合规,IDA有相应的名称规范可以在官网看文档)
a. ‘a’图标 :
同时,我们在上面紫色‘F’的图例看到有些Function被加粗了,这代表什么含义呢?
在IDA Help中找到了如下解释:
A bold font is used for functions that have definite (user-specified) prototype. Also some plugins too may set this flag. Such prototypes are taken as is by the decompiler, while other prototypes are considered only as a starting point during decompilation
IDA识别出了函数原型,可以用来反编译函数以及定位函数。
可见IDA的文档给的还是比较全的,但也存在一些问题,比如7.5版本的help中没有解释’’箭头’’图标以及’i’图标,同时在样本中并没有看到图标为’C’的项(故推测’i’图标即HELP中的’C’)。
并且IDA HELP中所写的‘I’跟‘L’表示导入名与库函数,似乎在7.5版本内仅仅使用颜色去标注了。
本人也去翻了几个版本的IDA更新文档,未看见相关说明,无奈文档内容过多且英语水平有限遂放弃继续查找。
本篇文章基于IDA 7.5 分析windows样本,所写内容为个人之浅见,若有错误或建议欢迎联系,加以改正。
联系方式见于’关于‘页面。