Уроки Iczelion'а




Урок 7. Таблица экспорта - часть 2


/p>

Вышеприведенная таблица может не дать вам ясного понимания, что такое таблица экспортов. Упрощенное объяснение ниже прояснит суть концепции.

Таблица экспортов существует для использования PE-загрузчиком. Прежде всего, модуль должен где-то сохранить адреса всех экспортированных функций где-то PE-загрузчик сможет их найти. Он держит их в массиве, на который ссылается поле AddressOfFunctions. Количество элементов в массиве находится в NumberOfFunctions. Таким образом, если модуль экспортирует 40 функций, массив будет также состоять из 40 элементов, NumberOfFunctions будет содержать значение 40. Теперь, если некоторые функции экспортируются по именам, модуль должен сохранить их имена в файле. Он сохраняет RVA имен в массиве, чтобы PE-загрузчик может их найти. Hа это массив сслыется AddressOfNames и количество имен находится в NumberOfNames.

Подумайте о работе, выполняемой PE-загрузчиком. Он знает имена экспортируемых функций, он должен каким-то образом получить адреса этих функций. До нынешнего момента модуль имел два массива: имена и адреса, но между ними не было связи. Теперь нам нужно что-то, что свяжет имена функций с их адресами. PE-спецификация использует индексы в массиве адресов в качестве элементарной линковки. Таким образом, если PE-загрузчик найдет имя, которое он ищет в массиве имен, он может также получить индекс в таблице адресов для этого имени. Индексы находятся в другом массиве, на который указывает поле AddressOfNameOrdinals. Так как этот массив существует в качестве посредника между именами и адресами, он должен содержать такое же количество элементов, как и массив имен, то есть, каждое имя может иметь один и только один ассоциированный с ним адрес. Чтобы линковка pаботала, оба массива имен и индексов, должны соответствовать друг другу, то есть, первый элемент в массиве индексов должен содержать индекс для первого имени и так далее.

AddressOfNamesAddressOfNameOrdinals

||

RVA of Name 1 Index of Name 1 <--> RVA of Name 2 Index of Name 2 <--> RVA of Name 3 <-->Index of Name 3




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