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

プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。

  1. Aソースコードを読み込んで、その場でコンパイルしてから実行する
  2. B実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める
  3. C実行ファイルのすべてのシンボル名を画面に表示してから実行する
答えと解説を見る

正解:B. 実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める

ローダは実行ファイルのヘッダを読み、プログラムヘッダに書かれた各部分(セグメント)を、読み取り・書き込み・実行の権限を付けて仮想アドレス空間に対応づけます。BSSのための0の領域やスタックを用意し、コマンドライン引数や環境変数をスタックに積みます。動的リンクなら動的リンカを、そうでなければ実行ファイルの入口の番地から実行を始めます。

  • A. 実行ファイルはすでに機械語です。
  • B. 正しい。メモリの準備と開始がローダの仕事です。
  • C. シンボル名を表示することはありません。
この分野を解く 分野ページへ

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

  1. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
  2. C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。
  3. 実行ファイルにstripコマンドを使ったときに起こることとして正しいものはどれか。
  4. リンカでの弱いシンボル(weak symbol)の扱いとして正しいものはどれか。
  5. C++のコンパイラが関数名に引数の型などの情報を付け加えてシンボル名を作る「名前修飾(マングリング)」の主な目的はどれか。