Go to main content
Oracle® Solaris 11.3 リンカーとライブラリガイド

印刷ビューの終了

更新: 2015 年 10 月
 
 

ELF 識別

ELF はオブジェクトファイルの枠組みを提供し、複数のプロセッサ、複数のデータエンコード、複数のクラスのマシンをサポートします。このオブジェクトファイルファミリをサポートするため、ファイルの初期バイトによりファイルの解釈方法が指定されます。これらの初期バイトは、問い合わせが行われるプロセッサにも、ファイルのほかの内容にも依存しません。

ELF ヘッダーおよびオブジェクトファイル の初期バイトは、e_ident メンバーに一致します。

表 15  ELF 識別インデックス
名前
目的
EI_MAG0
0
ファイルの識別
EI_MAG1
1
ファイルの識別
EI_MAG2
2
ファイルの識別
EI_MAG3
3
ファイルの識別
EI_CLASS
4
ファイルのクラス
EI_DATA
5
データのエンコード
EI_VERSION
6
ファイルのバージョン
EI_OSABI
7
オペレーティングシステム / ABI の識別
EI_ABIVERSION
8
ABI のバージョン
EI_PAD
9
パッドバイトの開始
EI_NIDENT
16
e_ident[] のサイズ

次のインデックスは、次の値を保持するバイトにアクセスします。

EI_MAG0 - EI_MAG3

ファイルを ELF オブジェクトファイルとして識別する 4 バイトの「マジックナンバー」。次の表を参照してください。

名前
位置
ELFMAG0
0x7f
e_ident[EI_MAG0]
ELFMAG1
'E'
e_ident[EI_MAG1]
ELFMAG2
'L'
e_ident[EI_MAG2]
ELFMAG3
'F'
e_ident[EI_MAG3]
EI_CLASS

バイト e_ident[EI_CLASS] は、ファイルのクラスまたは容量を示します。次の表にファイルのクラスを示します。

名前
意味
ELFCLASSNONE
0
無効なクラス
ELFCLASS32
1
32 ビットオブジェクト
ELFCLASS64
2
64 ビットオブジェクト

ファイル形式は、最大マシンのサイズを最小マシンに押しつけることなしにさまざまなサイズのマシン間で互換性が維持されるように設計されています。ファイルのクラスは、オブジェクトファイルコンテナのデータ構造によって使用される基本タイプを定義します。オブジェクトファイルセクションに含まれるデータは、異なるプログラミングモデルに準拠する場合があります。

クラス ELFCLASS32 は、4 ギガバイトまでのファイルと仮想アドレス空間が存在するマシンをサポートします。このクラスは、表 13 で定義される基本タイプを使用します。

クラス ELFCLASS64 は、64 ビット SPARC や x64 などの 64 ビットアーキテクチャー用に予約されています。このクラスは、表 14 で定義される基本タイプを使用します。

EI_DATA

バイト e_ident[EI_DATA] は、オブジェクトファイルのプロセッサ固有のデータのエンコードを指定します (次の表を参照)。

名前
意味
ELFDATANONE
0
無効なエンコード
ELFDATA2LSB
1
図 8 を参照してください。
ELFDATA2MSB
2
図 9 を参照してください。

これらのエンコードの詳細は、データのエンコードで説明します。ほかの値は、将来の使用に備えて保留されます。

EI_VERSION

バイト e_ident[EI_VERSION] は、ELF ヘッダーバージョン番号を指定します。現在この値は、EV_CURRENT でなければなりません。

EI_OSABI

バイト e_ident[EI_OSABI] は、オブジェクトのターゲット先となる ABI とともにオペレーティングシステムを識別します。ほかの ELF 構造体内のフィールドの中には、オペレーティングシステム特有または ABI 特有の意味を持つフラグおよび値を保持するものがあります。これらのフィールドの解釈は、このバイトの値によって決定されます。Oracle Solaris に関連した ABI 値を、次の表に示します。

名前
意味
ELFOSABI_NONE / ELFOSABI_SYSV
0
拡張子がないか未指定です
ELFOSABI_SOLARIS
6
Solaris
EI_ABIVERSION

バイト e_ident[EI_ABIVERSION] は、オブジェクトのターゲット先となる ABI のバージョンを識別します。このフィールドは、ABI の互換性のないバージョンを識別するために使用します。このバージョン番号の解釈は、EI_OSABI フィールドで識別される ABI によって異なります。プロセッサについて EI_OSABI フィールドに値が何も指定されていない場合、または EI_OSABI バイトの特定の値によって決定される ABI についてバージョンの値が何も指定されていない場合は、指定なしを示すものとして値 0 が使用されます。

EI_PAD

この値は、e_ident の使用されていないバイトの先頭を示します。これらのバイトは保留され、0 に設定されます。オブジェクトファイルを読み取るプログラムは、これらの値を無視します。