リンカ・ローダと実行形式
共有ライブラリで使われるGOT(グローバルオフセットテーブル)の役割として正しいものはどれか。
- Aライブラリの関数の名前を、アルファベット順に並べた目次である
- Bキャッシュに入りきらなかったデータを一時的に置く表である
- C外部の変数や関数の実際の番地をまとめた表で、実行時に動的リンカが埋め、コードはこの表を通して参照する
答えと解説を見る
正解:C. 外部の変数や関数の実際の番地をまとめた表で、実行時に動的リンカが埋め、コードはこの表を通して参照する
位置独立コードは、ほかのライブラリにある変数の番地を命令に直接書けません。そこで、各モジュールに番地を並べた表(GOT)を用意し、コードはPCからの距離でGOTの項目を読み、そこに入っている番地を使います。動的リンカは読み込んだときにGOTに実際の番地を書き込みます。書き換えるのは書き込み可能なデータのGOTだけなので、コードのページは共有したままにできます。
- A. 目次ではなく、番地の表です。
- B. キャッシュとは関係ありません。
- C. 正しい。書き換えるのはデータの表だけで、コードは書き換えません。