EXEファイルのPEヘッダ

IMAGE_NT_HEADERS32に定義

typedef struct _IMAGE_NT_HEADERS {
	DWORD Signature;
	IMAGE_FILE_HEADER FileHeader;
	IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADER32, *PIMAGE_NT_HEADERS32;

PE headerにもSignature
4byte? 32bitOSを意志的している

IMAGE_FILE_HEADER構造体

typedef struct _IMAGE_FILE_HEADERS {
	WORD Machine;
	WORD NumberOfSections;
	DWORD TimeDataStamp;
	DWORD PointerToSymbols;
	DWORD NumberOfSymbols;
	WORD SizeOfOptionalHeader;
	WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_NT_HEADERS;

Machineはそれぞれフラグがあう
unknown:0x0 あらゆるマシンタイプ
I386:0x14c Intel386以降
R3000: 0x162
R4000: 0x166 MIPS(r)リトルエンディアン
R10000: 0x168
….

NumberOfSections: 保持するセクション数
TimeDataStamp: 作成された日時
PointerToSymbols, NumberOfSymbols:シンボルテーブルの位置、数
SizeOfOptionalHeader: 構造体サイズ保持
Characteristics:ファイズ属性値
 IMAGE_FILE_EXECUTABLE: 0x0002
IMAGE_FILE_LINE_NUMS_STRIPPED: 0x0004

IMAGE_OPTIONAL_HEADER32構造体も同様に定義される
 Magic,MajorLinkerVersion, SizeOfCode, SizeOfInitializedData,
SizeOfInitializedData, SizeOfUnitializedData,AddressOfEntryPoint, BaseifCode, BaseOfData, ImageBase, …

IMAGE_DATA_DIRECTORY構造体はRVA, Size

PE Headerにはターゲットマシン、アライメント情報、セクション情報、メモリサイズ情報などが格納されており、OSがメモリにロードして実行する際に書き込まれる

OS側では書き込まれた内容を元にメモリで実行する
ツールを使用すればコンパイル時に自動生成される
第一印象項目が多いなと思ったが、exeファイルの共有フォーマットと考えると妥当か