|
EXEフォーマット(エグゼフォーマット)とはMS-DOSおよびMS-DOSの後継OSであるWindowsおよびOS/2の実行ファイルフォーマットである。 MS-DOSで実行可能なバイナリのフォーマットには他に、COMフォーマットと言うファイルフォーマットが存在する。COMフォーマットは、コード、データ、スタックの全てのセグメントが同一であるモデルで、開始番地も固定の0x100であるメモリイメージそのものであり、シンボル再配置も無い。COMフォーマットは、ファイルヘッダを持たず拡張性がなかった。 これに対し、EXEフォーマットは連続した一つのメモリイメージで、コード、データ、スタックの全てが別々の複数のセグメントを用いてアクセスする必要のある場合に対応し、開始アドレスおよびその時のセグメントレジスタの値をファイル先頭から相対指定することが可能でセグメント指定の再配置エントリが存在する。 COMフォーマットと区別するために、MS-DOSにおいてはファイル名には.EXEという拡張子が付けられ、ファイルの先頭には0x5A4D(ASCIIコードで'MZ'という文字列)〔WORD型として読み込む時のリトルエンディアンの場合。バイト並びは低位から0x4D,0x5Aである。〕のマジックナンバーが入っている。これは、MS-DOS 2.0の開発責任者の一人、Mark Zbikowskiのイニシャルに由来する。 C言語による表記は以下の通りである。尚、この定義はWineで使われているヘッダファイル(winnt.h)の定義から引用した。WORDは16ビット整数であり、DWORDは32ビット整数である。 typedef struct _IMAGE_DOS_HEADER IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; また、拡張ヘッダという概念が後に付け加えられ、そこから指定されたヘッダに、WindowsやOS/2の実行ファイルの情報を指定し、これらのOS用に作られたプログラムが本来のアーキテクチャでOSで実行された場合は、その拡張ヘッダを解釈し、MS-DOS上で実行された場合、実行できない事を表示し終了させる等のプログラムを置くことが可能である。このようなフォーマットにはPortable Executable (PE)やNew Executable (NE),Linear Executable(LE,LX)等が存在する。また、Microsoft Windows 3.xの386エンハンスドモードのカーネルであるWIN386.EXEや、Microsoft Windows 95等のカーネルであるVMM386.VXDでは特殊な拡張ヘッダで内部に存在するプロテクトモードのカーネルコードや仮想デバイスドライバ等へのオフセットを保持しており、リアルモードでの初期化を普通のDOSプログラムとして行った上で、そのヘッダにあるプロテクトモードのコードを実行していた。(WIN386.EXEではW3,VMM386.VXDではW4という識別子。) == 関連項目 == * オブジェクトファイル * 実行ファイル 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「EXEフォーマット」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 .exe 」があります。 スポンサード リンク
|