コンパイル・アセンブル
どこまでがコンパイルで、どこからがアセンブルが実はよく違いがわかっていなかった。
コンパイル・アセンブルの違い
広義には、「ソースコードから実行可能な形式に変換すること」をもってコンパイルと呼ぶ。
狭義には、
「ソースコードから中間言語のアセンブリ言語に変換し、アセンブリコードを生成する」 までがコンパイル。
「アセンブリコードから機械語まで変換し、オブジェクトコードを生成する」 のがアセンブル。
linuxではコンパイルはgccが行い、アセンブルはbinutilsが行う。
オブジェクトコードに変換後に、必要なライブラリとのリンクを行って実行可能な形式であるロード・モジュールになる。
つまり厳密にプロセスを分解するならば、
ソースコード→アセンブリコード:コンパイル
アセンブリコード→オブジェクトコード:アセンブル
オブジェクトコード→ロード・モジュール:リンク
という3段階からなる。
ロードモジュールとは
メインメモリーにロードできる実行ファイル形式のモジュール。プログラムがモジュールの集まりで構成されている場合、リンカによって結合されることで、ひとつのロードモジュールとして扱われる。