¤ Magic:
Так как это поле всегда равно 010Bh, похоже, что это какая-то сигнатура. Не интересно.
¤ Старшая и младшая версии линкера:
Версия линкера, который создал файл. Не интересно.
¤ Размер кода:
Количество байт (округленное) во всех секциях, содержащих исполняемый код.
¤ Размер инициализированных данных:
Предполагается, что здесь должен указываться общий размер всех секций с инициализированными данными.
¤ Размер неинициализированных данных:
Неинициализированные данные не занимают места на винте, но когда система загружает файл, она выделяет ему некоторое количество памяти (виртуальную память).
¤ Адрес точки входа:
Где загрузчик начнет выполнение кода. Это RVA относительно базы образа, когда система загружает файл. Очень интересно.
¤ База кода:
RVA, откуда начинаются секции файла с кодом. Секции с кодом обычно идут до секций с данными и после PE-заголовка. Для файлов, произведенных с помощью микрософтовских линкеров, этот RVA обычно равен 0x1000. TLINK32, похоже, добавляет к этому RVA базу образа и сохраняет результат в данном поле.
¤ База данных
RVA, откуда начинаются секции с данными. Они обычно идут последними после PE-заголовка и секций с кодом.
¤ База образа:
Когда линкер создает экзешник, он предполагает, что файл будет промэппирован в определенное место в памяти. Этот адрес и хранится в данном поле, делая возможным определенную оптимизацию со стороны линкера. Если файл действительно промэппирован по этому адресу, код не нуждается в каком-либо патчении перед запуском. В экзешниках, компилируемых для Windows NT, база образа по умолчанию равна 0x10000, а для DLL он по умолчанию равен 0x400000. В Win9x адрес 0x10000 не может использоваться при загрузке 32-х битных EXE, так как он находится внутри региона, разделяемого всеми процессами. Из-за этого Микрософт изменил адрес базы по умолчанию на 0x400000.
¤ Выравнивание секций:
При мэппировании секции выравниваются таким образом, чтобы они начинались с виртуального адреса, кратного данному значению. Выравнивание секций по умолчанию равно 0x1000.