オブジェクトファイル
オブジェクトファイル (object file) またはオブジェクトコード (object code) とは、コンパイラがソースコードを処理した結果生成される(たいていはアセンブリ言語による assembler code file と、アセンブラによるそれのアセンブルを経由している)、コード生成の結果にしてバイナリコードを含む中間的なデータ表現のファイルである。オブジェクトファイルは共有ライブラリのようにも使われることがある。名称としては、オブジェクトファイル、オブジェクトコードの他、オブジェクトプログラム(object program)とも。
オブジェクトモジュールとは、ソースコードをコンパイルした結果の(静的リンクが行われる前の)機械語プログラムである。これらオブジェクトモジュールの集合体がオブジェクトファイルである。
中身は、機械語バイナリと、異なるモジュール間の相互参照を解決するシンボルテーブルやリロケーションテーブル、スタック巻き戻し情報、コメント、さらにリンクまたはデバッグに使用されるメタデータが含まれる場合もある。
オブジェクトファイル群をリンクすることにより、最終的な実行ファイルやライブラリが作成される。オブジェクトファイルのほとんどは機械語(コンピュータのCPUが直接実行できるコード)であり、オブジェクトファイルフォーマットはコンパイラやアセンブラが生成するオブジェクトファイルのファイルフォーマットである。
殆どの種類のオブジェクトファイル形式は、一般的なメモリ管理の手法のひとつである "メモリセグメント" という用語に由来する "セグメント" と呼ばれる単位でデータを分割して保持しており、それぞれデータの種類が異なる。プログラムがローダによってメモリに読み込まれると、ローダはメモリの複数の領域をプログラムに割り当てる。
典型的なオブジェクトファイルフォーマットでサポートされるデータ種別は以下の通りである。
ヘッダー情報 (ディスクリプティブ/コントロール情報)
コードセグメント ("テキストセグメント"、実行形式コード)
データセグメント (初期値を持つ静的変数)
読み取り専用データセグメント (RODATA、初期値を持たない静的定数)
BSS セグメント (初期値を持たない変数や定数といった静的データ)
リンキングのための外部定義と参照情報
リロケーション情報
ダイナミックリンク情報
デバッグ情報
異なるオブジェクトファイル内のセグメントはセグメントの定義で決められた規則に従いリンカが結合する。例えば、DOSでは特別なセグメントの名前を決めたり結合されるべきかを定義した規則が存在する。
デバッグ情報はCOFFなどのフォーマットでは必須の部分だが、stabs(英語版)、DWARFなどのフォーマットでは半ば独立したフォーマットとなっている。
GNUプロジェクトのBFDライブラリは様々なフォーマットのオブジェクトファイルについての共通のAPIを提供する。