Уроки Iczelion'а



Урок 6. Таблица импорта


В этом туториале мы изучим таблицу импорта. Сначала я вас должен предупредить: этот туториал довольно долгий и сложный для тех, кто не знаком с таблицей импорта. Вам может потребоваться перечитать данное руководство несколько раз и даже проанализировать затрагиваемые здесь структуры под дебуггером.

Скачайте пример.

Теория:

Прежде всего, вам следует знать, что такое импортируемая функция. Импортируемая функция - это функция, которая находится не в модуле вызывающего, но вызываема им, поэтому употребляется слово "импорт". Функции импорта физически находятся в одной или более DLL. В модуле вызывающего находится только информация о функциях. Эта информация включает имена функций и имена DLL, в которых они находятся.

Как мы может узнать, где находится эта информация в PE-файле? Мы должны обратиться за ответом к директории данных. Я освежу вашу память. Вот PE-заголовок:

IMAGE_NT_HEADERS STRUCT Signature dd ? FileHeader IMAGE_FILE_HEADER <> OptionalHeader IMAGE_OPTIONAL_HEADER <> IMAGE_NT_HEADERS ENDS

Последний член опционального заголовка - это директория данных:

IMAGE_OPTIONAL_HEADER32 STRUCT .... LoaderFlags dd ? NumberOfRvaAndSizes dd ? DataDirectory IMAGE_DATA_DIRECTORY 16 dup(<>) IMAGE_OPTIONAL_HEADER32 ENDS

Директория данных - это массив структур IMAGE_DATA_DIRECTORY. Всего 16 членов. Если вы помните, таблица секций - это корневая директория секций PE-файлов, вы можете также думать о директории данных как о корневой директории логических компонентов, сохраненных внутри этих секций. Чтобы быть точным, директория данных содержит местонахождение и размеры важных структур данных PE-файла. Каждый параметр содержит информацию о важной структуре данных.

ПараметрИнформация

0 Символы экспорта
1 Символы импорта
2 Ресурсы
3 Исключение
4 Безопасность
5 Base relocation
6 Отладка
7 Строка копирайта
8 Unknown
9 Thread local storage (TLS)
10 Загрузочная информация
11 Bound Import
12 Таблица адресов импорта
13 Delay Import
14 COM descriptor
<


Содержание  Назад  Вперед