IMAGE_FILE_HEADER

PE フォーマットのイメージファイルで使用される COFF ファイルヘッダの情報を定義します。

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

メンバ

Machine

マシンタイプを識別する値が格納されます。例として以下のようなものがあります。ただし、ここにあげたものは一例で、実際にはもっと多くのマシンタイプが存在します。

意味
0x0000 (IMAGE_FILE_MACHINE_UNKNOWN) 任意のマシンタイプで有効と仮定される
0x014C (IMAGE_FILE_MACHINE_I386) Intel 80386 以降(またはその互換)のプロセッサ
0x014D Intel 80486 以降(またはその互換)のプロセッサ
0x014E Intel Pentium 以降(またはその互換)のプロセッサ
0x0160 R3000 (MIPS) プロセッサ(ビッグエンディアン)
0x0162 (IMAGE_FILE_MACHINE_R3000) R3000 (MIPS) プロセッサ(リトルエンディアン)
0x0166 (IMAGE_FILE_MACHINE_R4000) R4000 (MIPS) プロセッサ(リトルエンディアン)
0x01F0 (IMAGE_FILE_MACHINE_POWERPC) IBM Power PC (リトルエンディアン)
NumberOfSections

実行イメージに含まれるセクションの数が格納されます。

TimeDateStamp

ファイルが作成された日時が格納されます。この値の形式を記述したドキュメントは見つけられませんが、 C/C++ コンパイラ・リンカの多くは、 time_t 形式(世界標準時での、1970年1月1日の午前0時0分0秒からの秒数)を格納するようです。

PointerToSymbolTable

ファイル先頭からのシンボルテーブルのオフセットが格納されます。シンボルテーブルが含まれない場合は 0 になります。

NumberOfSymbols

シンボルテーブルに含まれるエントリの数が格納されます。

SizeOfOptionalHeader

COFF ファイルヘッダに続いて配置されているオプションヘッダ(IMAGE_OPTIONAL_HEADER 構造体)のサイズが格納されます。一般的なオプションヘッダのサイズは 224 (IMAGE_SIZEOF_NT_OPTIONAL_HEADER) です。

Characteristics

イメージの特性を示す値が格納されます。以下のビットフラグの組み合わせによって、イメージの属性が決定されます。

意味
0x0001 (IMAGE_FILE_RELOCS_STRIPPED)

イメージが再配置情報を持たないことを示します。

0x0002 (IMAGE_FILE_EXECUTABLE_IMAGE)

実行可能イメージであることを示します。

0x0004 (IMAGE_FILE_LINE_NUMS_STRIPPED)

シンボル行番号が削除されていることを示します。

0x0008 (IMAGE_FILE_LOCAL_SYMS_STRIPPED)

ローカルシンボルのためのCOFFシンボルが削除されていることを示します。

0x0010 (IMAGE_FILE_AGGRESSIVE_WS_TRIM)

0x0020 (IMAGE_FILE_LARGE_ADDRESS_AWARE)

2GB より大きいアドレスを扱うことができるアプリケーションであることを示します。

0x0040 (IMAGE_FILE_16BIT_MACHINE)

このフラグは予約されています。

0x0080 (IMAGE_FILE_BYTES_REVERSED_LO)

数値がリトルエンディアンで表現されていることを表します。

0x0100 (IMAGE_FILE_32BIT_MACHINE)

32ビットのマシンで実行されます。

0x0200 (IMAGE_FILE_DEBUG_STRIPPED)

デバッグ情報が削除されていることを示します。

0x0400 (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP)

イメージがリムーバブルメディア上にある場合には、イメージをスワップファイルにコピーしてそこから実行します。

0x0800 (IMAGE_FILE_NET_RUN_FROM_SWAP)

イメージがネットワーク上にある場合には、イメージをスワップファイルにコピーしてそこから実行します。

0x1000 (IMAGE_FILE_SYSTEM)

イメージファイルがシステムファイルであることを示します。

0x2000 (IMAGE_FILE_DLL)

イメージファイルが DLL であることを示します。

0x4000 (IMAGE_FILE_UP_SYSTEM_ONLY)

イメージファイルがマルチプロセッサマシンで実行されるように設計されていないことを示します。

0x8000 (IMAGE_FILE_BYTES_REVERSED_HI)

数値がビッグエンディアンで表現されていることを表します。

対応情報

Windows 95 以降 / Windows NT 3.1 以降

変数との対応

HSP 変数 メンバ
メンバ名 オフセット サイズ
flhdr.0 下位ワード Machine 0 2
上位ワード NumberOfSections 2 2
flhdr.1 TimeDateStamp 4 4
flhdr.2 PointerToSymbolTable 8 4
flhdr.3 NumberOfSymbols 12 4
flhdr.4 下位ワード SizeOfOptionalHeader 16 2
上位ワード Characteristics 18 2