リンカ・ローダと実行形式
プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
- Aソースコードを読み込んで、その場でコンパイルしてから実行する
- B実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める
- C実行ファイルのすべてのシンボル名を画面に表示してから実行する
答えと解説を見る
正解:B. 実行ファイルのプログラムヘッダにしたがって各部分をメモリに配置し、スタックに引数などを用意して、入口の番地から実行を始める
ローダは実行ファイルのヘッダを読み、プログラムヘッダに書かれた各部分(セグメント)を、読み取り・書き込み・実行の権限を付けて仮想アドレス空間に対応づけます。BSSのための0の領域やスタックを用意し、コマンドライン引数や環境変数をスタックに積みます。動的リンクなら動的リンカを、そうでなければ実行ファイルの入口の番地から実行を始めます。
- A. 実行ファイルはすでに機械語です。
- B. 正しい。メモリの準備と開始がローダの仕事です。
- C. シンボル名を表示することはありません。