このセクションは、SHT_SUNW_verdef 型で定義されます。このセクションが存在する場合、SHT_SUNW_versym セクションも存在しなければなりません。これら 2 つの構造体を使用することで、シンボルとバージョン定義の関連付けがファイル内で維持されます。詳細は、「バージョン定義の作成」を参照してください。このセクションの要素の構造体は、次のとおりです。
typedef struct { Elf32_Half vd_version; Elf32_Half vd_flags; Elf32_Half vd_ndx; Elf32_Half vd_cnt; Elf32_Word vd_hash; Elf32_Word vd_aux; Elf32_Word vd_next; } Elf32_Verdef; typedef struct { Elf32_Word vda_name; Elf32_Word vda_next; } Elf32_Verdaux; typedef struct { Elf64_Half vd_version; Elf64_Half vd_flags; Elf64_Half vd_ndx; Elf64_Half vd_cnt; Elf64_Word vd_hash; Elf64_Word vd_aux; Elf64_Word vd_next; } Elf64_Verdef; typedef struct { Elf64_Word vda_name; Elf64_Word vda_next; } Elf64_Verdaux;
この構造体の要素を次に示します。
この構成要素は、構造体自身のバージョンを示します (次の表を参照)。
表 7-30 ELF バージョン定義構造のバージョン
名前 |
値 |
説明 |
---|---|---|
VER_DEF_NONE |
0 |
無効バージョン |
VER_DEF_CURRENT |
>=1 |
現在のバージョン |
値 1 は最初のセクション形式を示し、拡張した場合は番号を大きくします。VER_DEF_CURRENT の値は、現在のバージョン番号を示すために必要に応じて変化します。
この構成要素は、バージョン定義に固有の情報を保持します (次の表を参照)。
表 7-31 ELF バージョン定義セクションのフラグ
名前 |
値 |
意味 |
---|---|---|
VER_FLG_BASE |
0x1 |
ファイル自身のバージョン定義 |
VER_FLG_WEAK |
0x2 |
ウィークバージョン識別子 |
ベースのバージョン定義は、バージョン定義またはシンボルの自動短縮簡約がファイルに適用されている場合、必ず存在します。ベースバージョンは、ファイルの予約されたシンボルに対してデフォルトのバージョンを与えます。ウィークバージョン定義には、関連付けられているシンボルは 存在しません。詳細は、「ウィークバージョン定義の作成」を参照してください。
バージョンインデックス。各バージョン定義には、SHT_SUNW_versym エントリを適切なバージョン定義に関連付ける一意のインデックスが存在します。
Elf32_Verdaux 配列の要素数。
バージョン定義名のハッシュ値。この値は、「ハッシュテーブル」に記述されているハッシング機能により生成されます。
この Elf32_Verdef エントリの先頭からバージョン定義名の Elf32_Verdaux 配列までのバイトオフセット。配列の先頭要素は存在しなければなりません。これはこの構造体が定義するバージョン定義文字列を指し示します。追加要素は存在可能です。要素の番号は vd_cnt 値で示されます。これらの要素は、このバージョン定義の依存関係を表します。これらの依存関係の各々は、独自のバージョン定義構造体を持っています。
この Elf32_Verdef 構造体の先頭から次の Elf32_Verdef エントリまでのバイトオフセット。
ヌル文字で終わる文字列への文字列テーブルオフセットで、バージョン定義名を指定します。
この Elf32_Verdaux エントリの先頭から次の Elf32_Verdaux エントリまでのバイトオフセット。