ELF形式とは何か?
パソコンでファイルの整理をしていたりプログラムのフォルダを見ていたり、fileコマンドで検索を行った際のバイナリファイルで拡張子が「.elf」となっているファイルについて気になったことはありませんか?拡張子が「.elf」のELFファイルは「Executable and Linkable Format」というコンパイラが生成したオブジェクト・ライブラリとリンクした実行ファイルのファイル形式です。UNIXにおける最初の実行ファイル形式の「a.out」ファイル・「COFF (Common Object File Format) 」ファイルの後継となるファイル形式です。
商用UNIXオペレーティング・システムである「System V(システムファイブ)」が採用しており、GNUプロジェクトのプログラミングツール群である「GNUツールチェーン」がサポートしています。現在ではBSD(Berkeley Software Distribution)派生のOS・LinuxをはじめとしてフリーのOSにおける実行ファイル形式として・またゲーム機などの組み込み機器の開発にも使用されています。
ELFには3種類のヘッダがあります。「ELFヘッダ」はファイルの先頭に存在してELF識別子・アーキテクチャ情報・残り2つのヘッダへの情報を持っています。「プログラムヘッダ」はファイルのどの部分がどの属性で、どこに読み込まれるかを保持するヘッダです。「セクションヘッダ」はオブジェクトファイルの論理的構造を記述しており、ヘッダという名ですが大体の場合はファイルの最後に置かれるためフッターと言えるでしょう。
ELFファイルでは「a.out」・「COFF」と違って動的な共有ライブラリの利用やC++言語のサポートが楽に行えるため、汎用性が高いです。