...При анализе заголовка РЕ я получил адрес таблицы импорта ( и в idata и в DATA DIRECTORY они совпадают), но когда полез шарится по этому адресу таблицы там не обнаружил. Просморев файл в HEX редакторе выяснил, что таблица импорта ( да и некоторые другие объекты) смещена на +0x400000 (замечательная цифра...). Так вот, подскажите люди добрые, как правильно адрес таблицы импорта найти? Может есть еще какие поля которые учесть надо?
0x400000 - ImageBase, т.е. предпочтительный базовый адрес по которому модуль будет загружен в адресное пространство процесса. А вообще есть грамотная статейка по этому поводу: http://www.wasm.ru/article.php?article=packlast01 Там и ссылок полезных полно.
0x400000 - ImageBase, т.е. предпочтительный базовый адрес по которому модуль будет загружен в адресное пространство процесса... Да, это понятно. Но суть в том что в одних файлах секции получаются как бы заранее настроенные с учетом "предпочтительного базового адреса", а в других нет. Как узнать что уже настроено, а что нет? (спасибо за ссылку, почитаю...)
Есть несколько базовых понятий при работе с 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.