Executable and Linkable Format
表示
拡張子 | なし、.o、.so |
---|---|
開発者 | UNIX Systems Laboratories |
種別 | バイナリ、実行可能、オブジェクト、共有ライブラリ、コアダンプ |
Executable and Linkable Format(ELF)とは、名前の通りコンパイラが生成するリンクすべきオブジェクトおよび実行ファイルのファイルフォーマットである。a.outフォーマット、COFFの後継として広く採用されている。メモリ上で連続していないファイルや、ロードされる場所と、実行される場所が違うような箇所を含む場合にも対応が可能な柔軟な設計となっている。
System Vに於いて採用され、今ではBSD派生OSや、LinuxをはじめとするFreeなOSに於ける実行ファイルフォーマットに好んで使われている。
ELFには以下の3種類のヘッダがある。
- ELFヘッダ
- ファイルの先頭に存在し、ELF識別子、アーキテクチャ情報および、他の2つヘッダへの情報を持つ。
- プログラムヘッダ
- ファイル上のどの部分(セグメント)がどのような属性で何処に読み込まれるかを保持するヘッダであり、ファイルローダによって扱われる。ELFヘッダに続いて実行時ディスクから何らかの形で読み込まれるセグメントの数だけ存在する。
- セクションヘッダ
- オブジェクトファイルの論理的な構造を記述する部分で、ヘッダと名前がついているが実際にはファイルの最後あたりに置かれている事が多い。ここはリンカやデバッガによって参照される事がある。セクションはセクション名があるが、それは特殊なセクションに置かれ何番目の文字列かという指し方を行う。このことによって、エントリそのものは固定長にしつつセクション名の長さ制限を取り払っている。
共有ライブラリにも対応しており、然るべき属性のセグメント内にある、Procedure Location Tableや、Global Offset Tableを利用して、間接的に参照することになる。
デバッグ情報のフォーマットは定義されていないが、ELF(妖精)をもじったDebug With Arbitary Record Format略してDWARF(小人)と呼ばれる形式のフォーマットがよく使われる。