PE подава PE заглавие

3.1. Структура на заглавката

Заглавката PE (IMAGE_NT_HEADERS) винаги е подравнена с 8 байта и се състои от три части:

Както вече споменахме, заглавката PE винаги започва с 4-байтовия подпис "PE \ 0 \ 0" (IMAGE_NT_SIGNATURE). Следва две заглавки: заглавка на файл (IMAGE_FILE_HEADER) и незадължителен заглавка (IMAGE_OPTIONAL_HEADER). Въпреки името си, IMAGE_OPTIONAL_HEADER винаги присъства в PE файла (той не е задължителен по отношение на общия формат COFF, тъй като не се използва в обектни и библиотечни файлове).

3.2. Заглавна част на файла

Заглавката на файла се състои от 0x14 байта (дефиниция IMAGE_SIZEOF_FILE_HEADER), поставя се веднага след подписа и съдържа общо описание на файла. Състои се от следните полета:

Нека опишем целта на полетата.

Машинно поле

16-битово число, което определя архитектурата на процесора, на която може да работи тази програма. Наясно съм със следните кодове на процесора (повечето от които никога не се поддържаха в Windows):

Поле TimeDateStamp

32-битово число, което съдържа датата и часа на създаване на файла. Форматът на това поле е без документи, но колекционерите на Microsoft записват времето тук като брой секунди от 01.01.1970 г. в полунощ UTC (т.е. те използват Unix формат на времето, върнат от функцията за време C). Между другото, това означава, че текущото състояние на формата PE е валидно само до 18.01.2038 г.

Тъй като форматът на това поле е без документи, някои колекционери на трети страни запазват значението му в други формати. Това може да е важно, тъй като това поле се използва при динамично свързване на импортиране от DLL файлове.

Полета PointerToSymbolTable и NumberOfSymbols

Съгласно стандарта COFF тези 4-байтови полета трябва да осигуряват достъп до информация за отстраняване на грешки във файла. Всички познати на мен колектори обаче поставят нули в тях и се използва различен метод за достъп до информация за отстраняване на грешки (вижте директорията за информация за отстраняване на грешки).

SizeOfOptionalHeader поле