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.