Согласно Формат PE
Важно признать, что PE-файлы не загружаются в память как отдельные файлы отображения памяти. Загрузчик Windows (также известный как PE-загрузчик) просматривает PE-файлы и решает, какая часть файла отображается. Этот метод отображения отображает более высокое смещение файла на более высокий адрес памяти. Структура файла PE в основном одинакова для диска и памяти, но при загрузке в память она копируется не полностью. Загрузчик Windows решает, какие части загружать, а какие нет необходимости загружать. Кроме того, из-за несоответствия между выравниванием диска и выравниванием памяти распределение файлов PE, загруженных в память, будет отличаться от распределения файлов PE на диске.
Вот картинка: приложение загружено в память
Изображение отображения памяти
Базовое значение адреса задается самим PE-файлом. Согласно настройкам по умолчанию, EXE-файл, созданный Visual C ++, имеет базовый адрес 00400000h, а базовый адрес DLL-файла - 10000000h. Однако вы можете изменить этот адрес при создании приложения, используя параметр соединителя / BASE при подключении к приложению, или настроив его через приложение REBASE после подключения.
Кроме того, этот вопрос похож на ваш вопрос. Вы можете сослаться на это.
При загрузке ресурсов PE-файла