Если вы хотите поиграть с Portable Executables, вы не сможете получить копию спецификации .
Это было какое-то время, но если память мне не изменяет: IT и IAT идентичны, за исключением того, что IAT заполняется PE-загрузчиком при разрешении импорта - но не верьте моему слову это, проверьте спецификации:)
EDIT:
Я быстро просмотрел спецификации и немного освежил мою память:
Таблица импорта - это основная структура , с одной записью на DLL, из которой вы импортируете. Каждая запись содержит, помимо прочего, Таблица поиска импорта ( ILT ) и Таблица адресов импорта ( IAT ) указатель (iirc this раньше назывался OriginalFirstThunk
и FirstThunk
). Таблицы ILT и IAT идентичны на диске, но во время выполнения IAT будет заполняться адресами памяти импортируемых функций.
Поле IAT PE-заголовка, вероятно, нельзя полагаться на 100%, если вы хотите иметь возможность работать с нестандартными EXE-файлами, точно так же, как вы не можете зависеть от кода начала / размера-размера и указателей данных. Лучше игнорировать поле заголовка IAT и вместо этого анализировать IT. Кроме того, при разборе IT в некоторых исполняемых файлах будет отсутствовать ILT, поскольку только IAT - более старые компоновщики borland (iirc) были известны тем, что не генерировали ILT.
РЕДАКТИРОВАТЬ 2: определения
- IT: таблица импорта (раздел 6.4.1 PeCoff) - таблица per-DLL
IMAGE_IMPORT_DESCRIPTOR
.
- ILT: Таблица поиска импорта (раздел 6.4.2 PeCoff) - таблица импорта
IMAGE_THUNK_DATA
.
- IAT: таблица адресов импорта (раздел 6.4.4 PeCoff) - на диске: идентично ILT, среда выполнения: заполнена импортированными адресами памяти функций.