5.2 COFFの再配置(オブジェクトのみ)

オブジェクト ファイルはCOFFの再配置を含み、それはセクション データがイメージ ファイル内に配置され、その後でメモリにロードされるときに、どのように変更されるべきかを指定します。

イメージ ファイルはCOFF再配置を含みません。これは、参照されるすべてのシンボルにはすでにフラットなアドレス空間でのアドレスが割り当てられているからです。イメージは.relocセクションでのベース再配置という形で再配置情報を含みます(イメージにIMAGE_FILE_RELOCS_STRIPPED属性がない場合)。詳しくは6.5節を参照してください。

オブジェクト ファイルの各セクションには、セクションのCOFF再配置が固定長レコードの配列という形で含まれています。配列の位置と長さはセクション ヘッダで指定されています。配列の各要素の形式は以下の通りです。

オフセット サイズ フィールド 解説
0 4 VirtualAddress 再配置が適用される項目のアドレス。これはセクションの先頭からのオフセットにセクションのRVA/Offsetフィールド(4節「セクション テーブル」参照)の値を加えたものです。たとえば、セクションの先頭バイトのアドレスが0x10であるならば、第3バイトのアドレスは0x12になります。
4 4 SymbolTableIndex 0から始まるシンボル テーブルのインデックス。このシンボルは再配置のために使われるアドレスを与えます。指定されたシンボルにセクション ストレージ クラスがある場合には、シンボルのアドレスは同じ名前の最初のセクションのアドレスです。
8 2 Type どの種類の再配置が行われるかを示す値。有効な再配置タイプはマシン タイプに依存します。5.2.1節「タイプ インジケータ」を参照してください。

参照されるシンボル(SymbolTableIndexによって)のストレージ クラスがIMAGE_SYM_CLASS_SECTIONである場合、シンボルのアドレスはセクションの先頭です。セクションは通常は同じファイル内にありますが、オブジェクト ファイルがアーカイブ(ライブラリ)の一部である場合は別です。その場合にはセクションは現在のオブジェクト ファイルと同じアーカイブ メンバ名を持つアーカイブ内の別のオブジェクト ファイルにあります(アーカイブ メンバ名との関係はインポート テーブルのリンクで使われます。.idataセクション参照)。


戻る