Расположение таблиц в PE файлах

Тема в разделе "WASM.BEGINNERS", создана пользователем hotbird, 19 июл 2005.

  1. hotbird

    hotbird New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    4
    Адрес:
    Russia
    ...При анализе заголовка РЕ я получил адрес таблицы импорта ( и в idata и в DATA DIRECTORY они совпадают), но когда полез шарится по этому адресу таблицы там не обнаружил. Просморев файл в HEX редакторе выяснил, что таблица импорта ( да и некоторые другие объекты) смещена на +0x400000 (замечательная цифра...). Так вот, подскажите люди добрые, как правильно адрес таблицы импорта найти? Может есть еще какие поля которые учесть надо?
     
  2. Dimson

    Dimson New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2005
    Сообщения:
    59
    Адрес:
    Russia
    0x400000 - ImageBase, т.е. предпочтительный базовый адрес по которому модуль будет загружен в адресное пространство процесса. А вообще есть грамотная статейка по этому поводу:

    http://www.wasm.ru/article.php?article=packlast01

    Там и ссылок полезных полно.
     
  3. hotbird

    hotbird New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2005
    Сообщения:
    4
    Адрес:
    Russia
    0x400000 - ImageBase, т.е. предпочтительный базовый адрес по которому модуль будет загружен в адресное пространство процесса...



    Да, это понятно. Но суть в том что в одних файлах секции получаются как бы заранее настроенные с учетом "предпочтительного базового адреса", а в других нет.

    Как узнать что уже настроено, а что нет?

    (спасибо за ссылку, почитаю...)
     
  4. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Есть несколько базовых понятий при работе с PE:

    - file offset - просто смещение в файле

    - VA = virtual address - адрес в памяти, который будет после загрузки PE в память

    - RVA = relative virtual address - смещение в памяти относительно адреса загрузки

    Есть соотношение RVA = VA - base_address.

    Все структуры PE-файла используют RVA, поскольку, вообще говоря, PE может быть загружен по разным адресам в памяти, и тогда VA изменятся, а RVA от базового адреса не зависят. Есть такое понятие, как предпочтительный адрес загрузки, содержится в поле ImageBase. Многие инструменты, впрочем, отображают именно VA в предположении, что файл был загружен по ImageBase. Например, IDA и hiew.