オブジェクトファイル
概要
機械語コード・データ・その管理情報から構成されるような、コンパイラやアセンブラで生成される中間コードもしくは実行可能ファイルのこと。 目的別に次の3種類がある。
リンク可能(.a):リンカへの入力として利用可能なもの。静的ライブラリ。
ロード可能(.so):ライブラリとしてメモリにロード可能。動的(共有)ライブラリ。動的リンク参照 確認
プログラミング言語やその処理系によってはコンパイルしたあとにhoge.oというオブジェクトファイルが実際に動かすバイナリと別に生成されていることがあるが、この.oファイルがオブジェクトファイルである。
gccのコンパイルオプションで-cを与えることで実行不可能なリンク前のオブジェクトファイルを生成することもできる。
gcc -c hoge.c => ディレクトリ内にhoge.oが生成されている
libcは動的ライブラリ(プログラムの実行時にローダによってリンクされる)なので/usr/lib/にlibc.so.xxxみたいなファイルが多分あると思います(僕の環境ではlibc.so.6でした)
オブジェクトファイル(実行可能ファイル)はOSやCPUによって様々なフォーマットがある。 table:オブジェクトファイルの具体例
フォーマット 用途
ELF(Executable and Linkable Format) リンク・実行可能
基本的な構成要素
オブジェクトファイルは基本的に次の要素を含んだフォーマットになっている。
ヘッダ:下記の領域の位置およびサイズ
オブジェクトコード:機械語やデータ本体
再配置情報:オブジェクトコードの配置アドレスを変更するのに必要な情報
シンボル:オブジェクトファイル内で定義される大域シンボル(グローバル変数)
大域シンボルはどのファイルからもアクセスできるので、リンクする際にちゃんとその位置をリンクしたオブジェクトコード内で合わせる必要がある
デバッグ情報