リンカ・ローダと実行形式
実行ファイルをPIE(位置独立実行ファイル)として作る主な理由はどれか。
- A実行ファイルをどのOSでも動かせるようにするため
- B実行ファイルの中に、すべてのライブラリを含めるため
- C実行ファイル本体のコードも、ASLRで実行のたびに違う番地に置けるようにするため
答えと解説を見る
正解:C. 実行ファイル本体のコードも、ASLRで実行のたびに違う番地に置けるようにするため
昔の実行ファイルは、決まった番地に読み込まれることを前提に作られていたので、ASLRを使ってもライブラリやスタックしかずらせず、本体のコードの番地は攻撃者に知られていました。PIEは本体も位置独立コードで作り、どこに読み込んでも動くようにしたもので、本体の番地もランダムにできます。現在の多くのLinuxのディストリビューションは、PIEを標準にしています。
- A. OSの違いを吸収するものではありません。
- B. ライブラリを含めるのは静的リンクです。
- C. 正しい。固定の番地だと本体だけ予測できてしまいます。