🌟

ソースファイルから実行ファイルができるまで

2022/05/09に公開

流れ

ソースファイルから実行されるまでの流れ

ダンプファイル
  • 拡張子は.dmp
  • ダンプ = データとかをそのままの形で出力すること、1バイトずつ2桁の16進数で表示

マシン語とは

マシン語ってなんや
  • CPUが直接解釈・実行できる言語
  • 16進数(2進数でも表せられるけど16進数の方が読みやすいからそっちが使われてる模様)
  • 3E CD 32 00 01 76 こんな感じ

コンパイラ

コンパイラ
  • 高水準言語で書かれたソースコードをネイティブコードに翻訳すること
  • 言語の種類に応じて専用のコンパイラが必要
  • ソースコードの構文解析、字句解析などをしてネイティブコードを作成する
  • コンパイラもプログラムなので動作環境がある(Windows用cコンパイラ、Linux用cコンパイラ、など)
  • コンパイルして作られるファイル = オブジェクトファイル(.obj)
クロスコンパイラ
  • コンパイラが動作している以外のプラットフォーム向けに実行ファイルを生成する機能を持つコンパイラ
    (通常のコンパイラは自身が動作しているシステムで動作する実行コード(オブジェクトコード)を生成する)
  • 開発に使用している機種やOSとは異なる環境向けに実行可能なコードを生成すること
コンパイルだけでは実行できない?

コンパイルされたファイルを実行可能なEXEファイルにするにはリンクが必要(詳細は次の項目)
コンパイルして作られるファイル = オブジェクトファイル(.obj)

リンカー

リンカーとは何者か
  • 機械語のプログラムの断片を適切に結合し、実行可能なプログラムとして生成するためのプログラム
  • 高水準言語によって書かれた複数のソースコードを、それぞれ機械語に翻訳(コンパイル)した時、それらはまだ実行できるプログラムではない
  • リンカーでプログラムの断片を適切に構成する作業が必要
  • ソースコードがコンパイルされるとオブジェクトファイルというプログラムの断片が生成される
  • これらのオブジェクトファイルやライブラリを適切に組み合わせることで、ライブラリや実行可能プログラム(exeファイル)が作られる
  • コンパイルの作業とリンクの作業を合わせて、ビルドと呼ぶ
コードがバイナリへと変換される流れ
  1. コンパイルによってオブジェクトファイルへと変換
  2. リンカーによって各種関数がコードにリンク
  3. 実行ファイル完成
リンク
  • 複数のオブジェクトファイルを結合してEXEファイルを作成すること
  • リンクを行うプログラムをリンカーという

Discussion