Executable and Linkable Format (ELF) は実行ファイルおよびオブジェクトファイルのためのファイルフォーマットである。コンテナフォーマットの一種。

ELF
拡張子なし、.o.so.elf
.app.bin.ko
マジック
ナンバー
0x7f ELF
開発者UNIX Systems Laboratories
種別バイナリ実行可能オブジェクト共有ライブラリコアダンプ

a.outフォーマットCOFFの後継として広く採用されている。セクション数の制限が緩く、メモリ上で連続していないファイルや、ロードされる場所と実行される場所が違う箇所を含む場合にも対応が可能な柔軟な設計となっている。

System V が採用し、GNUツールチェーンがサポートしている。今ではBSD派生OSやLinuxをはじめとするフリーなOSにおける実行ファイルフォーマットや、ゲーム機等を含む組み込み機器開発にも数多く使われている。

ヘッダ

編集

ELFには以下の3種類のヘッダがある。

 
ELFファイルの構造
ELFヘッダ
ファイルの先頭に存在し、ELF識別子、アーキテクチャ情報および、他の2つのヘッダへの情報を持つ。
プログラムヘッダ
ファイル上のどの部分(セグメント)がどのような属性で何処に読み込まれるかを保持するヘッダであり、ファイルローダによって扱われる。実行時にELFヘッダに続いてディスクから何らかの形で読み込まれるセグメントの数だけ存在する。直接読み込まれるわけではないオブジェクトファイルには存在しないことがある。
セクションヘッダ
オブジェクトファイルの論理的な構造を記述する部分である。一般にはリンカデバッガ等、バイナリの実行以外の目的でELFファイルにアクセスするツールが使用する。バイナリの実行時には必ずしも必要でない情報が多いため、ヘッダと名前がついているが実際にはファイルの最後あたりに置かれていることが多い。
各セクションには通常セクション名がある。セクション名の文字列はELFヘッダにて指定された文字列専用セクションにヌル終端文字列として置かれ、その専用セクションの先頭からのオフセット[1]をもって文字列を指定する。このことによって、エントリそのものは固定長にしつつセクション名の長さ制限を取り払っている。指定するオフセットは文字列専用セクションにある文字列の途中を指すことも可能で、サフィックスが重複する文字列をまとめて記述することができる。

共有ライブラリ

編集

共有ライブラリにも対応しており、しかるべき属性のセグメント内にある、Procedure Location Tableや、Global Offset Tableを利用して、間接的に参照することになる。

デバッグ情報ファイル

編集

デバッグ情報のフォーマットは定義されていないが、ELF(妖精)をもじったDebug With Arbitrary Record Format略してDWARF(小人)と呼ばれる形式のフォーマットがよく使われる。

  1. ^ 正確には、文字列専用セクションの先頭から、各文字列のサイズをカウントしたときのオフセットである。文字列専用セクションにて2バイト以上のアラインメントが指定されている場合、文字列同士の間にパディングが入るため単純に文字列専用セクション先頭にオフセットを加えただけでは対象文字列の先頭にならないことがある。

関連項目

編集

外部リンク

編集