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

ELFのファイルにおける「セクション」と「セグメント」の違いとして正しいものはどれか。

  1. AセクションはWindows用、セグメントはLinux用の呼び方で、中身は同じである
  2. Bセクションはリンカが扱う細かい単位で、セグメントはローダがメモリに読み込む単位として権限の同じセクションをまとめたもの
  3. Cセグメントはディスク上にだけあり、メモリには読み込まれない
答えと解説を見る

正解:B. セクションはリンカが扱う細かい単位で、セグメントはローダがメモリに読み込む単位として権限の同じセクションをまとめたもの

ELFには2つの見方があります。リンカは.text、.rodata、.data、.bssなどの細かいセクションを単位に結合や再配置を行います。ローダはプログラムヘッダに書かれたセグメントを単位にメモリへ対応づけ、例えば読み取りと実行のセグメントに.textと.rodataを、読み書きのセグメントに.dataと.bssをまとめます。権限ごとにまとめると、ページ単位の保護を設定しやすくなります。

  • A. どちらもELFの用語で、役割が違います。
  • B. 正しい。リンクのための見方と実行のための見方です。
  • C. セグメントこそメモリに読み込まれる単位です。
この分野を解く 分野ページへ

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

  1. メモリのページに「書き込み可能」と「実行可能」を同時には許さない(W^X、書き込みと実行の分離)ことで防ぎやすくなる攻撃はどれか。
  2. Linuxの共有ライブラリで、libfoo.so.1の「.1」のようなsonameのバージョン番号を上げるのは、一般にどのようなときか。
  3. Linuxでlddコマンドを実行ファイルに使うと分かることはどれか。
  4. 主なOSで使われる実行ファイルの形式の組み合わせとして正しいものはどれか。
  5. 再帰が深くなりすぎてスタックの上限を超えたとき、Linuxなどで一般に起こることとして正しいものはどれか。