我在IDA中注意到,我分析的PE文件不仅具有.rdata
部分,而且还具有.idata
。有什么不同?
最佳答案
.rdata
用于const数据。它是.data段的只读版本。 .idata
保存导入目录(.edata用于导出)。 EXE和DLL使用它来指定导入和导出的功能。有关详细信息,请参见PE格式规范(http://msdn.microsoft.com/library/windows/hardware/gg463125)。 总结典型的段名称:
.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提到的那样,段名称只是典型的。真正的段类型在段头中指定,或通过使用存储在段中的数据来定义。