# 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.