25

我在 IDA 中注意到,我分析的 PE 文件不仅有.rdata部分,还有.idata. 有什么不同?

4

2 回答 2

56

总结典型的段名:

.text: Code 
.data: Initialized data
.bss: Uninitialized data
.rdata: Const/read-only (and initialized) data
.edata: Export descriptors
.idata: Import descriptors
.reloc: Relocation table (for code instructions with absolute addressing when
          the module could not be loaded at its preferred base address)
.rsrc: Resources (icon, bitmap, dialog, ...)
.tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs)

正如 Martin Rosenau 所提到的,段名称只是典型的。真正的段类型在段标头中指定,或者通过使用存储在段中的数据来定义。

于 2013-09-25T22:24:19.430 回答
8

实际上,Windows 会忽略段的名称。

有些链接器使用不同的段名称,甚至可以将导入描述符、导出描述符、资源等存储在“.text”段中,而不是使用单独的段。

但是,为此类元数据创建单独的部分似乎更简单,因此大多数链接器将使用单独的部分。

这意味着:“.idata”、“.rdata”、“.rsrc”等节包含程序数据(尽管它们的名称以“data”结尾),但它们包含操作系统使用的元信息。例如,“.rsrc”部分包含有关在资源管理器中查看可执行文件时显示的图标的信息。

“.idata”包含有关程序所需的所有 DLL 文件的信息。

于 2013-09-26T06:55:05.827 回答