Сейчас на форуме: -Sanchez- (+7 невидимых) |
eXeL@B —› Основной форум —› Файл формата PE. Структура DATA_DIRECTORY |
Посл.ответ | Сообщение |
|
Создано: 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 для физического файла, а виртуальные для проекции. |
|
Создано: 29 сентября 2015 20:03 · Личное сообщение · #2 Нужно просканировать таблицу секций и найти ту, которой принадлежит искомый RVA, вычесть VirtualAddress и прибавить PointerToRawData. | Сообщение посчитали полезным: Sunchey |
|
Создано: 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 |
|
Создано: 18 октября 2015 20:40 · Личное сообщение · #4 Спасибо за ответы, разобрался. Отпишусь тут, может кому полезно будет. Как уже было написано, надо найти секцию, к которой относится RVA по виртуальным адресам секций. После нахождения искомой секции, вычисляем по таблице секций разницу между физическим смещением в файле и виртуальным для данной секции. Эту разницу и вычитаем из RVA на таблицу импорта - получается смещение на эту таблицу в физическом файле (offset). Кстати, если в hiew поставить базу по Ctrl-F5 на ноль, то адресация файла станет согласно адресам в физическом файле, а не в виртуальном адресном пространстве. |
eXeL@B —› Основной форум —› Файл формата PE. Структура DATA_DIRECTORY |