sal.io.format.fmt_pe

次の資料を元に作成しています.
「Microsoft Platform SDK」 のヘッダファイル
「PECOFF仕様」 http://www.microsoft.com/whdc/system/platform/firmware/PECOFFeula.mspx (2008/07/28 版)
日本語資料が欲しい...



IMAGE_DOS_HEADER MS-DOS用ヘッダ
Stab Program MS-DOSでの実行時用プログラム
PE Header PEイメージファイルヘッダ
PE Optional Header PEイメージファイルオプションヘッダ
Data Dicationary データディクショナリ
Section Data セクションデータ
COFF Line Number COFF行番号
COFF Symbols COFF行シンボル
COFF Debug COFFデバッグ情報


invariant ushort IMAGE_DOS_SIGNATURE;
MZ

invariant uint IMAGE_NT_SIGNATURE;
PE\0\0

enum IMAGE_FILE_MACHINE;
Machine for IMAGE_FILE_HEADER.

I386
Intel 386.

R3000
MIPS little-endian, 0x160 big-endian

R4000
MIPS little-endian

R10000
MIPS little-endian

WCEMIPSV2
MIPS little-endian WCE v2

ALPHA
Alpha_AXP

SH3
SH3 little-endian

SH3E
SH3E little-endian

SH4
SH4 little-endian

SH5
SH5

ARM
ARM Little-Endian

POWERPC
IBM PowerPC Little-Endian

IA64
Intel 64

MIPS16
MIPS

ALPHA64
ALPHA64

MIPSFPU
MIPS

MIPSFPU16
MIPS

AXP64
same ALPHA64

TRICORE
Infineon

EBC
EFI Byte Code

AMD64
AMD64 (K8)

M32R
M32R little-endian

invariant int IMAGE_NUMBEROF_DIRECTORY_ENTRIES;
ディレクトリエントリ

invariant int IMAGE_SIZEOF_SHORT_NAME;
セクション名の長さ

invariant ushort IMAGE_FILE_RELOCS_STRIPPED;
ファイルから再配置情報削除済

invariant ushort IMAGE_FILE_EXECUTABLE_IMAGE;
実行可能ファイル

invariant ushort IMAGE_FILE_LINE_NUMS_STRIPPED;
[非推奨] COFF行番号削除済

invariant ushort IMAGE_FILE_LOCAL_SYMS_STRIPPED;
[非推奨] COFFシンボル削除済

invariant ushort IMAGE_FILE_AGGRESIVE_WS_TRIM;
[非推奨] 旧版 working set 削除済

invariant ushort IMAGE_FILE_LARGE_ADDRESS_AWARE;
2GBアドレス以上のハンドル可

invariant ushort IMAGE_FILE_BYTES_REVERSED_LO;
[非推奨] リトルエンディアン

invariant ushort IMAGE_FILE_32BIT_MACHINE;
32bit-wordアーキテクチャ

invariant ushort IMAGE_FILE_DEBUG_STRIPPED;
デバッグ情報削除済

invariant ushort IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP;
メディア上のイメージ,スワップより実行

invariant ushort IMAGE_FILE_NET_RUN_FROM_SWAP;
ネット上のイメージ,スワップより実行

invariant ushort IMAGE_FILE_SYSTEM;
システムファイル

invariant ushort IMAGE_FILE_DLL;
DLL

invariant ushort IMAGE_FILE_UP_SYSTEM_ONLY;
ユニプロセッサ上でのみ実行すべき

invariant ushort IMAGE_FILE_BYTES_REVERSED_HI;
[非推奨] ビッグエンディアン

invariant ushort IMAGE_DLLCHARACTERISTICS_NO_ISOLATION;
isolationを認識するがimageを分離しない

invariant ushort IMAGE_DLLCHARACTERISTICS_NO_SEH;
SEHを使用しない. SEハンドラは、存在しないかもしれない

invariant ushort IMAGE_DLLCHARACTERISTICS_NO_BIND;
バインドしない

invariant ushort IMAGE_DLLCHARACTERISTICS_WDM_DRIVER;
ドライバがWDMモデルを使用する

invariant uint IMAGE_SCN_TYPE_NO_PAD;
予約

invariant uint IMAGE_SCN_CNT_CODE;
実行コードを含むセクション

invariant uint IMAGE_SCN_CNT_INITIALIZED_DATA;
初期化データを含むセクション

invariant uint IMAGE_SCN_CNT_UNINITIALIZED_DATA;
未初期化データを含むセクション

invariant uint IMAGE_SCN_LNK_OTHER;
予約

invariant uint IMAGE_SCN_LNK_INFO;
コメント、他情報を含むセクション

invariant uint IMAGE_SCN_LNK_REMOVE;
イメージの一部でないものを含む

invariant uint IMAGE_SCN_LNK_COMDAT;
comdat を含むセクション

invariant uint IMAGE_SCN_LNK_NRELOC_OVFL;
extended 再配置を含むセクション

invariant uint IMAGE_SCN_MEM_DISCARDABLE;
破棄可能なセクション

invariant uint IMAGE_SCN_MEM_NOT_CACHED;
キャッシュ不可なセクション

invariant uint IMAGE_SCN_MEM_NOT_PAGED;
ページ不可なセクション

invariant uint IMAGE_SCN_MEM_SHARED;
共有不可なセクション

invariant uint IMAGE_SCN_MEM_EXECUTE;
実行可能なセクション

invariant uint IMAGE_SCN_MEM_READ;
読み取り可能なセクション

invariant uint IMAGE_SCN_MEM_WRITE;
書き込み可能なセクション

invariant uint IMAGE_SCN_SCALE_INDEX;
TLSのインデックススケーリング

enum IMAGE_SUBSYSTEM;
サブシステム.

UNKNOWN
不明.

NATIVE
デバイスドライバ, Native プロセス用

WINDOWS_GUI
GUIサブシステム

WINDOWS_CUI
CUIサブシステム

OS2_CUI
OS/2 CUI サブシステム

POSIX_CUI
POSIX CUI サブシステム

NATIVE_WINDOWS
Native Windows 9x ドライバ

WINDOWS_CE_GUI
Windows CEサブシステム

EFI_APPLICATION


EFI_BOOT_SERVICE_DRIVER


EFI_RUNTIME_DRIVER


EFI_ROM


XBOX


struct IMAGE_DOS_HEADER;
DOS .EXE ヘッダ.

ushort e_magic;
Magic "MZ" 固定

ushort e_cblp;
ファイルの最終ページバイト数

ushort e_cp;
ファイルのページ数

ushort e_crlc;
再配置

ushort e_cparhdr;
パラグラフ中のヘッダサイズ

ushort e_minalloc;
エキストラパラグラフに必要な最小値

ushort e_maxalloc;
エキストラパラグラフに必要な最大値

ushort e_ss;
初期SS(スタックセグメント)

ushort e_sp;
初期SP(スタックポインタ)

ushort e_csum;
チェックサム

ushort e_ip;
初期IP(インストラクションポインタ)

ushort e_cs;
初期CS(コードセグメント)

ushort e_lfarlc;
再配置テーブルのファイルアドレス

ushort e_ovno;
オーバレイ番号

ushort[4u] e_res;
予約

ushort e_oemid;
OEM ID

ushort e_oeminfo;
OEM 情報

ushort[10u] e_res2;
予約

uint e_lfanew;
PEヘッダが格納されている位置

struct IMAGE_NT_HEADERS32;
PEヘッダ.

uint Signature;
"PE\0\0" 固定

IMAGE_FILE_HEADER FileHeader;
PEヘッダ情報

IMAGE_OPTIONAL_HEADER32 OptionalHeader;
オプショナルヘッダ

struct IMAGE_FILE_HEADER;
ファイルヘッダ.

IMAGE_FILE_MACHINE Machine;
see IMAG_FILE_MACHINE

ushort NumberOfSections;
セクション数

uint TimeDateStamp;
EXE作成日

uint PointerToSymbolTable;
シンボルテーブル位置(EXEでは0)

uint NumberOfSymbols;
シンボル数(EXEでは0)

ushort SizeOfOptionalHeader;
オプションヘッダサイズ

ushort Characteristics;
ファイル属性

struct IMAGE_DATA_DIRECTORY;
IMAGE_DATA_DIRECTORY.

uint VirtualAddress;
仮想アドレス

uint Size;
サイズ

struct IMAGE_OPTIONAL_HEADER32;
オプショナルヘッダ.

ushort Magic;
Magic

ubyte MajorLinkerVersion;
リンカメジャーバージョン

ubyte MinorLinkerVersion;
リンカマイナーバージョン

uint SizeOfCode;
コードセクションのサイズ

uint SizeOfInitializedData;
初期化されたデータセクションサイズ

uint SizeOfUninitializedData;
未初期化データセクションサイズ

uint AddressOfEntryPoint;
エントリポイント [ImageBase]

uint BaseOfCode;
メモリにロード後のコードセクション位置

uint BaseOfData;
メモリにロード後のデータセクション位置

uint ImageBase;
メモリ上のどこに、EXEファイルイメージをロードするかの位置.

0x00400000 通常のEXEファイル
0x10000000 DLLファイル
0x00010000 WindowsCEのEXEファイル


uint SectionAlignment;
各セクションがメモリにロードされるときの境界をバイト単位で指定.

uint FileAlignment;
ファイル上のアライメントを指定.

ushort MajorOperatingSystemVersion;
OS Major Version (多くの場合4)

ushort MinorOperatingSystemVersion;
OS Minor Versoin (多くの場合0)

ushort MajorImageVersion;
EXE Major Version (動作には影響無し)

ushort MinorImageVersion;
EXE Minor Version (動作には影響無し)

ushort MajorSubsystemVersion;
Subsystem Major Version (OSと一緒でよい)

ushort MinorSubsystemVersion;
Subsystem Minor Version (OSと一緒でよい)

uint Win32VersionValue;
予約 (0でなければならない)

uint SizeOfImage;
メモリ上にロードした際のイメージサイズ

uint SizeOfHeaders;
ヘッダ情報総バイト数

uint CheckSum;
チェックサム(EXEの場合は0で良い、参照:imagehelp.dll)

IMAGE_SUBSYSTEM Subsystem;
サブシステム

ushort DllCharacteristics;
DLLの特性(0でも問題はない)

uint SizeOfStackReserve;
スタックサイズ

uint SizeOfStackCommit;
コミットするスタックサイズ

uint SizeOfHeapReserve;
ローカルヒープサイズ

uint SizeOfHeapCommit;
コミットするローカルヒープサイズ

uint LoaderFlags;
予約(0でなければならない)

uint NumberOfRvaAndSizes;
データディクショナリエントリ数(通常16)

IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] DataDirectory;
次の16個の要素からなる.
Export Table
Import Table
Resource Table
Exception Table
Certificate Table
Base Relocation Table
Debug
Architecture
Global Ptr
TLS Table
Load Config Table
Bound Import
IAT
Delay Import Descriptor
Reserved


struct IMAGE_SECTION_HEADER;
セクションヘッダ.

ubyte[IMAGE_SIZEOF_SHORT_NAME] Name;
セクション名. 一般的に以下のセクションがある.
.text ネイティブコード
.data グローバル変数領域、初期値
.idata インポート関数情報
.edata エクスポート関数情報
.rsrc リソース情報
.debug デバッグ情報
.reloc 再配置情報
.tls スレッドごとの静的変数に関する情報


uint VirtualSize;
メモリ上セクションサイズ

uint VirtualAddress;
メモリ上のセクション位置

uint SizeOfRawData;
ファイル上のセクションサイズ

uint PointerToRawData;
ファイル上のセクション位置

uint PointerToRelocations;
再配置エントリ情報ファイル上の位置(EXEの場合0)

uint PointerToLinenumbers;
行番号エントリ情報ファイル上の位置

ushort NumberOfRelocations;
再配置エントリ数(EXEの場合0)

ushort NumberOfLinenumbers;
行番号エントリ数

uint Characteristics;
セクションの特性


Page generated by Ddoc.