В этом туториале мы изучим файловый заголовок PE.
Давайте кратко повторим то, что мы уже изучили:
Мы изучим больше о PE-заголовке в этом туториале. Официальное название PE-заголовка - это IMAGE_NT_HEADERS. Чтобы освежить вашу память, я покажу ее ниже.
IMAGE_NT_HEADERS STRUCT Signature dd ? FileHeader IMAGE_FILE_HEADER <> OptionalHeader IMAGE_OPTIONAL_HEADER32 <> IMAGE_NT_HEADERS ENDS
Signature - это PE-сигнатура, "PE" следуемое за двумя нулями. Вы уже знаете и используете это параметр.
FileHeader - это структура, которая содержит информацию о физическом составе/свойствах PE-файла вообще.
OрtionalHeader - это также структура, которая содержит информацию о логическом составе PE-файла.
Самая интересная часть - это OрtionalHeader. Тем не менее, некоторые поля в FileHeader также важны. Мы изучим FileHeader в этом туториале, так что мы можем перейти к изучению OрtionalHeader'а в следующих туториалах.
IMAGE_FILE_HEADER STRUCT Machine WORD ? NumberOfSections WORD ? TimeDateStamp dd ? PointerToSymbolTable dd ? NumberOfSymbols dd ? SizeOfOptionalHeader WORD ? Characteristics WORD ? IMAGE_FILE_HEADER ENDS
Machine | CPU платформа, для которой предназначен этот файл. Для платформы Intel это значение равно IMAGE_FILE_MACHINE_I386. Я попытался использовать 14Dh и 14Eh, упоминающиеся в pe.txt от LUEVELSMEYER, но Windows отказалась запустить ее. Это поле едва ли представляет для нас какой-либо интерес, кроме быстрого пути не дать программе быть запущенной. |
NumberOfSection | Количество секций в файле. Hам понадобится изменять данный параметр, если мы захотим добавить или убрать секцию из файла. |
TimeDataStamp | Дата и время, когда был создан файл. Бесполезен для нас. |
PointerToSymbolTable | используется для отладки. |
NumberOfSymbols | используется для отладки. |
SizeOfOptionalHeader | Размер параметра OрtionalHeader'а, который следует непосредственно за этой структурой. Должен быть установлен в правильное значение. |
Charactericstics | Содержит флаги для файла, например является ли этот файл exe или dll. |