リンカーとライブラリ

注釈セクション

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

次の図に示すように、セクションとプログラムヘッダー要素内の注釈情報は任意の数のエントリを保持します。64 ビットおよび 32 ビットのオブジェクトについては、各エントリはターゲットプロセッサの形式になっている 4 バイトワードの配列です。注釈情報の構造についての説明を容易にするため、ラベルを 図 7–6 に示します。 ただし、ラベルは仕様の一部ではありません。

図 7–5 注釈の情報

ELF セクションの注釈情報。

この構造体の要素を次に示します。

nameszname

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

descszdesc

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

type

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

次の図に示す注釈セグメントは、2 つのエントリを保持しています。

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

ELF セクションの注釈の例。


注 –

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