1.基本概念

本文書はMicrosoft Windows NT(tm)の実行(イメージ)ファイルおよびオブジェクト ファイルの構造を規定するものです。 これらのファイルはそれぞれPortable Executable(PE)ファイルおよびCommon Object File Format(COFF)ファイルと呼ばれます。「Portable Executable(ポータブルな実行形式)」という名前は、この形式がアーキテクチャに固有のものでないことを示しています。

いくつかの概念は、本仕様を通じて繰り返して現れます。それらについて、次の表で説明します。

名前 機能説明
イメージ ファイル 実行ファイルは、.EXEファイルまたは.DLLファイルです。イメージ ファイルは「メモリ上のイメージ」であると考えることができます。「イメージ ファイル」という言葉は通常「実行可能ファイル」の代わりに使われます。というのは、後者はしばしば.EXEファイルだけを意味するからです。
オブジェクト ファイル リンカへの入力として渡されるファイルです。リンカはイメージ ファイルを作成し、今度はこれがローダへの入力として使われます。「オブジェクト ファイル」という用語には必ずしもオブジェクト指向プログラミングとの関連があるわけではありません。
RVA 相対仮想アドレス(Relative Virtual Address)。あるイメージ ファイルにおいて、RVAは常に「いったんメモリにロードされた」項目のアドレスで、イメージ ファイルのベース アドレスはそれから引かれます。項目のRVAは、ほとんど常にディスク上のそのファイル内の位置(ファイル ポインタ)と異なっています。

オブジェクト ファイル内では、RVAはあまり意味を持ちません。これは、メモリ位置が割り当てられていないためです。この場合、RVAはセクション(下記参照)内のアドレスとなります。これに対する再配置は、後で、リンク時に行われます。単純化のために、コンパイラは各セクションの最初のRVAをゼロにセットします。

仮想アドレス (VA) イメージ ファイルのベース アドレスが引かれないことを除けばRVA(上記参照)と同じです。このアドレスは「仮想アドレス」と呼ばれます。これは、Windows NTが各プロセスのために、物理メモリとは独立の、個別の仮想アドレス空間を作成するためです。ほとんどすべての目的で、仮想アドレスは単なるアドレスと見なされます。仮想アドレスはRVAほど予測可能ではありません。これは、ローダがイメージをその望みの場所にロードするとは限らないためです。
ファイルポインタ リンカ(オブジェクト ファイルの場合)やローダ(イメージ ファイルの場合)によって処理される前のファイル自体の内部における項目の位置。いいかえれば、ディスク上に格納されているファイル内での位置。
タイムスタンプ タイムスタンプはPE/COFFファイルの多数の箇所で、さまざまな目的のために使用されます。しかし、それらのスタンプの形式は常に同じです。これはCのランタイム ライブラリの時間関数によって使われている形式です。
セクション セクションは、PE/COFFファイル内でのコードまたはデータの基本単位です。たとえば、オブジェクト ファイルの中では、すべてのコードを1つのセクションの内部にまとめることができます。また、(コンパイラの動作によっては)各関数がそれだけで1つのセクションを占有することもできます。セクションの数が増えると、ファイルのオーバーヘッドが増えますが、リンカはコードをより選択的にリンクできるようになります。セクションは、Intel(r) 8086アーキテクチャにおけるセグメントに似ているところがあります。セクション内の生データはすべて連続してロードされなければなりません。さらに、イメージ ファイルは特別な用途を持つ.tlsまたは.relocといった多数のセクションを持つことができます。
属性認証 属性認証は、検証可能なイメージをイメージ ファイルに結び付けるために使用されます。ファイルに結び付けることのできるさまざまな種類の検証可能な文がありますが、もっとも有用なものの1つで、記述が簡単なものは、ソフトウェア製造元による、イメージのメッセージ ダイジェストがどのようなものになるはずであるかを記述した文です。メッセージ ダイジェストはチェックサムに似ていますが、偽造は非常に困難です。したがって、もとのファイルと同じメッセージ ダイジェストを持つようにファイルを変更することは非常に困難です。この文は製造元によって公開鍵暗号方式により、製造元によって作られたものであることが検証されます。本文書では、属性認証をイメージ ファイルに挿入できるようにすることのほかは、属性認証の詳細については触れません。


戻る