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

実行ファイルをPIE(位置独立実行ファイル)として作る主な理由はどれか。

  1. A実行ファイルをどのOSでも動かせるようにするため
  2. B実行ファイルの中に、すべてのライブラリを含めるため
  3. C実行ファイル本体のコードも、ASLRで実行のたびに違う番地に置けるようにするため
答えと解説を見る

正解:C. 実行ファイル本体のコードも、ASLRで実行のたびに違う番地に置けるようにするため

昔の実行ファイルは、決まった番地に読み込まれることを前提に作られていたので、ASLRを使ってもライブラリやスタックしかずらせず、本体のコードの番地は攻撃者に知られていました。PIEは本体も位置独立コードで作り、どこに読み込んでも動くようにしたもので、本体の番地もランダムにできます。現在の多くのLinuxのディストリビューションは、PIEを標準にしています。

  • A. OSの違いを吸収するものではありません。
  • B. ライブラリを含めるのは静的リンクです。
  • C. 正しい。固定の番地だと本体だけ予測できてしまいます。
この分野を解く 分野ページへ

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

  1. プログラムを起動するとき(Linuxのexecveなど)に、OSのローダが行うこととして正しいものはどれか。
  2. C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
  3. C言語のmain関数が「return 3;」で終わったとき、その値3は一般にどうなるか。
  4. 実行ファイルにstripコマンドを使ったときに起こることとして正しいものはどれか。
  5. リンカでの弱いシンボル(weak symbol)の扱いとして正しいものはどれか。