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-байтови полета трябва да осигуряват достъп до информация за отстраняване на грешки във файла. Всички познати на мен колектори обаче поставят нули в тях и се използва различен метод за достъп до информация за отстраняване на грешки (вижте директорията за информация за отстраняване на грешки).