Является ли «таблица адресов импорта» PE на dll или exe? - PullRequest
1 голос
/ 27 сентября 2010

Кто-нибудь знает, является ли «таблица адресов импорта» в исполняемом формате PE в Windows «per dll» или «per exe»?

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Любой PE может иметь таблицу адресов импорта, поэтому их могут иметь как DLL, так и EXE.Это имеет смысл, поскольку оба могут иметь зависимости (импорт) от других двоичных файлов.Если вы не выполняете динамическую загрузку (LoadLibrary / GetProcAddress), у вас будет таблица адресов импорта при вызове в другой модуль.

Вы можете использовать утилиту dumpbin с Visual Studio, чтобы увидетьимпорт PE:

Пример для user32.dll:

C: \ Windows \ System32> dumpbin / import user32.dll

Microsoft (R) COFF / PE Dumper Версия 10.00.30319.01 Copyright (C) Microsoft Corporation.Все права защищены.

Дамп файла user32.dll

Тип файла: DLL

Раздел содержит следующие операции импорта:

ntdll.dll
          7DC60000 Import Address Table
          7DCCACEC Import Name Table
                 0 time date stamp
                 0 Index of first forwarder reference

              15A NtOpenKey
              7A9 wcscat_s
              7AD wcscpy_s
                  ...

... и для notepad.exe ...

C: \ Windows \ System32> dumpbin / import notepad.exe

Microsoft (R) COFF/ PE Dumper Версия 10.00.30319.01 Copyright (C) Microsoft Corporation.Все права защищены.

Дамп файла notepad.exe

Тип файла: EXECUTABLE IMAGE

Раздел содержит следующие операции импорта:

ADVAPI32.dll
           1001000 Import Address Table
           100A234 Import Name Table
          FFFFFFFF time date stamp
          FFFFFFFF Index of first forwarder reference

  77C71C82    27E RegSetValueExW
  77C7BCD5    26E RegQueryValueExW
  77C7BED4    230 RegCloseKey
                  ...
0 голосов
/ 09 ноября 2017

Краткий ответ:

IAT (таблица адресов импорта) указана для PE-файла (dll и exe).

Длинный ответ:

Когда загрузчик загружает exe-файл, он копирует каждый раздел PE в память процесса, если для этих разделов не установлено IMAGE_SCN_MEM_DISCARDABLE. IAT находится в разделе .idata ( msdn ):

В разделе .idata PE-файла содержится информация, необходимая загрузчику для определения адресов целевых функций и внесения их в исполняемый образ. Раздел .idata (или таблица импорта, как я предпочитаю ее называть) ...

IMAGE_SCN_MEM_DISCARDABLE не установлен для секции idata. Поэтому раздел idata скопирован в память, и как exe, так и dll имеют этот раздел, то есть IAT соответствует PE.

Я написал простой загрузчик DLL здесь , если это поможет вам понять.

...