Отладчик может найти виртуальный адрес разделов программы в переносимом (PE) файле.
Его структура описана в
https://msdn.microsoft.com/library/windows/desktop/ms680547%28v=vs.85%29.aspx?id=19509
Вы можете проверять исполняемые файлы с помощью специального инструмента, такого как PEview .exe из
http://wjradburn.com/software/
или посмотрите шестнадцатеричный дамп вашего "helloworld.exe".
По адресу файла (FA) 0x3C вы найдете DWORD с FA, равным PE Header , например, 0x00000090 = 144.
Пропустите 144 байта от начала файла, и вы увидите DWORD PEsignature с последующим
20 байтов CoffFileHeader . На 16. байте CoffFileHeader есть WORD SizeOfOptionalHeader,
со значением 0x00E0 = 224. Это множество байтов OptionalHeader непосредственно следует за CoffFileHeader.
По смещению 0xC4 = 196 в OptionalHeader есть поле DWORD с именем ImageBase с VA, где находится изображение
отображается в памяти. Большинство компоновщиков используют ImageBase = 0x00400000.
За OptionaHeader следует SectionHeader с, по одному для каждого раздела, используемого в программе.
Каждый SectionHeader имеет длину 40 байт, он содержит SectionName в своих первых восьми байтах, за которыми следует размер раздела, округленный до SectionAlignment, а затем относительный виртуальный адрес ( RVA ) в начале раздела. Обычно первый раздел представляет собой раздел кода с именем = .text , размером = 0x00001000 и RVA = 0x00001000.
RVA каждого раздела относится к ImageBase, поэтому раздел .text будет отображаться по адресу ImageBase + RVA = 0x00401000 .
Какой ответ на ваш вопрос.