Сейчас на форуме: -Sanchez- (+7 невидимых)

 eXeL@B —› Основной форум —› Файл формата PE. Структура DATA_DIRECTORY
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 29 сентября 2015 01:55 · Поправил: Sunchey
· Личное сообщение · #1

Здравствуйте.

Я пытаюсь разобраться с форматом файла PE. В опциональном заголовке есть структура DATA_DIRECTORY, в которой есть ссылка на таблицу испорта (на IMAGE_IMPORT_DESCRIPTOR).
В моем самом простом файле hello_word.exe данные из таблицы директорий для таблицы импорта такие: RVA 0x00017414 и размер 0x28. Все как и должно быть, но вот только RVA ссылается на образ загруженного в ОП файла, а как быть с физическим файлом на диске?

Как можно найти таблицу импорта в .exe файле, если я его попытаюсь открыть простым hex-редактором? Как эту таблицу находит загрузчик, чтобы спроецировать ее по нужному адресу в памяти?
Я могу найти таблицу импорта, например, в HIEW по F8-F10, но там и адреса не Raw offset для физического файла, а виртуальные для проекции.



Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 29 сентября 2015 20:03
· Личное сообщение · #2

Нужно просканировать таблицу секций и найти ту, которой принадлежит искомый RVA, вычесть VirtualAddress и прибавить PointerToRawData.

| Сообщение посчитали полезным: Sunchey


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 30 сентября 2015 21:00
· Личное сообщение · #3

Sunchey пишет:
Я пытаюсь разобраться с форматом файла PE.


Возьмите уроки Iczelionа, на этой странице (http://www.programminghorizon.com/win32assembly/tutorials.html) есть ссылка на PE tutorials, там вся структура PE file разобрана от и до.
В частности урок 6 - import table.

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: Dynamic, Sunchey

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 октября 2015 20:40
· Личное сообщение · #4

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

Как уже было написано, надо найти секцию, к которой относится RVA по виртуальным адресам секций.
После нахождения искомой секции, вычисляем по таблице секций разницу между физическим смещением в файле и виртуальным для данной секции. Эту разницу и вычитаем из RVA на таблицу импорта - получается смещение на эту таблицу в физическом файле (offset).

Кстати, если в hiew поставить базу по Ctrl-F5 на ноль, то адресация файла станет согласно адресам в физическом файле, а не в виртуальном адресном пространстве.


 eXeL@B —› Основной форум —› Файл формата PE. Структура DATA_DIRECTORY
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати