Загрузка PE: Что делать с ресурсным разделом? - PullRequest
0 голосов
/ 25 марта 2019

Я изучаю формат файла PE и как их загружает Windows.Я уже знаю о большинстве разделов и как они загружаются / отображаются в памяти.Но я понятия не имею, что происходит с разделом ресурсов, так как все адреса там являются последовательными и не требуют каких-либо изменений.

Я сделал тестовый загрузчик, который выполняет базовую загрузку, но цельВ файле .exe есть ресурсы, и они никогда не загружаются.

1 Ответ

2 голосов
/ 27 марта 2019

Согласно Формат PE

Важно признать, что PE-файлы не загружаются в память как отдельные файлы отображения памяти. Загрузчик Windows (также известный как PE-загрузчик) просматривает PE-файлы и решает, какая часть файла отображается. Этот метод отображения отображает более высокое смещение файла на более высокий адрес памяти. Структура файла PE в основном одинакова для диска и памяти, но при загрузке в память она копируется не полностью. Загрузчик Windows решает, какие части загружать, а какие нет необходимости загружать. Кроме того, из-за несоответствия между выравниванием диска и выравниванием памяти распределение файлов PE, загруженных в память, будет отличаться от распределения файлов PE на диске.

Вот картинка: приложение загружено в память

Изображение отображения памяти

Базовое значение адреса задается самим PE-файлом. Согласно настройкам по умолчанию, EXE-файл, созданный Visual C ++, имеет базовый адрес 00400000h, а базовый адрес DLL-файла - 10000000h. Однако вы можете изменить этот адрес при создании приложения, используя параметр соединителя / BASE при подключении к приложению, или настроив его через приложение REBASE после подключения.

Кроме того, этот вопрос похож на ваш вопрос. Вы можете сослаться на это.

При загрузке ресурсов PE-файла

...