Смею порекомендовать еще один ресурс для чтения: https://docs.microsoft.com/en-us/windows/desktop/Debug/pe-format, который описывает исполняемые файлы на основе COFF, используемые в MS Windows.
Запускается память, назначенная исполняемому образу в виртуальном адресном пространстве процессапри VA, заданном IMAGE_OPTIONAL_HEADER.ImageBase
, который в большинстве компоновщиков по умолчанию равен 0x0040_0000
.ОС загружает заголовки и сегменты из исполняемого файла и начинается в ImageBase.Начальный VA каждого деления округляется до IMAGE_OPTIONAL_HEADER.SectionAlign
, что обычно составляет 0x0000_1000
.
Первый раздел - заголовки.Windows загружает здесь заголовки EXE-файла, то есть заглушку DOS, COFF_FILE_HEADER, IMAGE_OPTIONAL_HEADER, SECTION_HEADERs.Если общий размер этих заголовков не превышает 4 КБ, следующим доступным выровненным VA является 0x0040_1000
, и первый сегмент (обычно .text
) загружается туда.Следующий сегмент (AKA раздел в терминологии MS) равен .data
, и он загружен в 0x0040_2000
и т. Д.
Виртуальные адреса, начинающиеся с сегмента, были выбраны более или менее произвольно.Обратите внимание, что это округленные и симпатичные числа, которые выглядят хорошо, и легко пересчитать связанные с сегментами адреса, видимые в списке, по виртуальным адресам, видимым в отладчиках.
Виртуальное адресное пространство, назначенное исполняемому образу, начинается с IMAGE_OPTIONAL_HEADER.ImageBase
и его округленный размер сохраняется в IMAGE_OPTIONAL_HEADER.SizeOfImage
.Все, что ниже и выше этого диапазона, может использоваться ОС для других целей: стек, куча, динамически загружаемые библиотеки, отображение файловой памяти.