eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

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

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

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

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

Ранг: 35.8 (посетитель)
Статус: Участник

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

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

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



Ранг: 380.9 (мудрец)
Статус: Участник
_Вечный_Студент_

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

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


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

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


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

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

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

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

Кстати, если в hiew поставить базу по Ctrl-F5 на ноль, то адресация файла станет согласно адресам в физическом файле, а не в виртуальном адресном пространстве.
 eXeL@B —› Основной форум —› Файл формата PE. Структура DATA_DIRECTORY

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS