リンカーとライブラリ

注釈セクション

ソフトウェアを開発して販売する場合、オブジェクトファイルに特別な情報を付加して、他のプログラムから準拠性や互換性などを確認できるようにしたいことがあります。SHT_NOTE 型のセクションと PT_NOTE 型のプログラムヘッダー要素は、この目的に対して使用できます。

セクションとプログラムヘッダー要素での注釈情報は任意の数のエントリを保持し、これらの各エントリは対象プロセッサの形式になっている 4 バイトワードの配列です。注釈情報の構造についての説明を容易にするためにラベルを図 7-5 に示します。ただし、ラベルは規約の一部ではありません。

図 7-5 注釈の情報

Graphic

nameszname

name の先頭 namesz バイトには、エントリの所有者または作者を示す、空文字 で終わっている文字列が存在します。名前の競合を回避するための正式な機構は存在しません。慣例では、ベンダーは識別子として自身の名前 ("XYZ Computer Company" など) を使用します。name が存在しない場合、namesz は 0 になります。name の領域は、パッドを使用して、4 バイトに整列します。必要であれば namesz は、パッドの長さを含みません。

descszdesc

desc の先頭 descsz バイトは、注釈記述を保持します。注釈の記述が存在しない場合、descsz は 0 になります。desc の領域は、必要であればパッドを使用して、4 バイトに整列します。descsz はパットの長さを含みません。

type

このワードは注釈の記述の解釈方法を示します。各エントリの作者は、自分で種類を管理しますので、1 つの type 値に関して複数の解釈が存在することがあります。したがって、注釈の記述を認識するには、name と type の両方を認識しなければなりません。type は現在、負でない値でなければなりません。

たとえば、以下の注釈のセグメントは 2 つのエントリを保持しています。

図 7-6 注釈セグメントの例

Graphic


注 -

システムは注釈情報 (名前が存在せず (namesz == 0)、名前の長さが 0 (name[0] == '¥0') を予約していますが、現在 type を定義していません。他のすべての名前には、少なくとも 1 つの空ではない文字が存在しなければなりません。