リンカ・ローダと実行形式

Linuxで動的リンクのプログラムを起動するときに働く動的リンカ(ld.soなど)の役割として正しいものはどれか。

  1. Aソースコードをコンパイルして機械語を作る
  2. B必要な共有ライブラリを探してメモリに読み込み、シンボルを結びつけてからプログラムを開始させる
  3. Cプログラムが終了したあと、ディスクの空き領域を整理する
答えと解説を見る

正解:B. 必要な共有ライブラリを探してメモリに読み込み、シンボルを結びつけてからプログラムを開始させる

動的リンクの実行ファイルには、使う動的リンカの場所が書かれており、OSはプログラムを読み込むと、まず動的リンカに処理を渡します。動的リンカは必要な共有ライブラリを探して読み込み、再配置とシンボルの結合を行ってから、プログラムの入口へ制御を移します。dlopenで実行中にライブラリを追加で読み込む処理も、動的リンカが受け持ちます。

  • A. コンパイルはコンパイラの仕事です。
  • B. 正しい。実行時のリンクを担当します。
  • C. ディスクの整理とは関係ありません。
この分野を解く 分野ページへ

リンカ・ローダと実行形式のほかの問題

  1. ASLR(アドレス空間配置のランダム化)の目的として正しいものはどれか。
  2. 実行ファイルをPIE(位置独立実行ファイル)として作る主な理由はどれか。
  3. プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
  4. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
  5. C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。