コンパイラI(フロントエンド:字句・構文・意味解析)
10 問ソースコードが字句解析でトークンに分けられ、構文解析で抽象構文木(AST)になり、意味解析で型検査や名前解決を受けるまでの流れを学びます。各段階でどんなエラーが検出されるかの違いに注目します。
コンパイラII(バックエンド:中間表現・最適化・コード生成)
10 問中間表現(IR)がSSA形式で表され、最適化パス・レジスタ割り当て・命令選択を経てアセンブリやオブジェクトコードになる仕組みと、なぜ最適化がプログラムの観測可能な挙動を変えないのか(as-ifルール)を学びます。
オブジェクトファイルとELF(セクション・シンボル・ABI)
10 問再配置可能オブジェクトファイルの構造(ELFヘッダ・セクション・シンボルテーブル)と、呼び出し規約やデータレイアウトを定めるABIが、分割コンパイルとリンクを可能にする理由を学びます。
静的リンク(シンボル解決と再配置)
10 問リンカが複数のオブジェクトファイル間で未定義シンボルを解決し、再配置エントリを適用してアドレスを確定させ、1つの実行可能ファイルを組み立てる原理を学びます。
動的リンク(共有ライブラリ・PLT/GOT・遅延束縛)
10 問共有ライブラリがどのように共有され、位置独立コード(PIC)・GOT/PLT・遅延束縛によって実行時にシンボルが解決される仕組みと、静的リンクとのトレードオフを学びます。
ローダと実行開始(プロセス生成・メモリマップ・エントリポイント)
10 問execve時にカーネルのローダがELFをメモリへマップし、動的リンカを起動し、_start からCランタイム初期化を経て main へ制御が渡るまでの流れと、デバッグ情報(DWARF)がそれをどう記述するかを学びます。