В чем разница?rdata and.idata по сегментам?

Я заметил в IDA, что файл PE, который я анализирую, имеет не только , но и .idata. Какая разница?

2 ответов


  • .rdata для данных const. Это только для чтения версия .сегмент данных.

  • .idata содержит каталог импорта (.еданные для экспорта). Он используется 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)

As Мартин Розенау упоминает, что названия сегментов являются типичными. Истинный тип сегмента указывается в заголовке сегмента или определяется использованием данных, хранящихся в сегменте.


фактически, имена сегментов игнорируются Windows.

есть компоновщики, которые используют разные имена сегментов, и даже можно хранить дескрипторы импорта,дескрипторы экспорта, ресурсы и т. д. в ".текст " сегмент вместо использования отдельных сегментов.

однако, кажется, проще создать отдельные разделы для таких метаданных, поэтому большинство компоновщиков будут использовать отдельные разделы.

Это означает: разделы ".idata по", ".данные rdata", ".rsrc",... do не содержат данные программы (хотя их имя заканчивается на "данные"), но они содержат метаинформацию, которая используется операционной системой. Этот." например, раздел" rsrc " содержит информацию о значке, который отображается при просмотре исполняемого файла в Проводнике.

".idata " содержит информацию обо всех DLL-файлах, требуемых программой.