リンカ・ローダと実行形式
共有ライブラリを作るとき、外から使う関数だけを公開し、内部の関数はシンボルの可視性(visibility)を「hidden」にする利点として正しいものはどれか。
- A内部の関数が暗号化され、解析できなくなる
- B動的リンカが扱うシンボルが減って読み込みが速くなり、内部の呼び出しもPLTを通さずに済む
- CライブラリをどのOSでも動かせるようになる
答えと解説を見る
正解:B. 動的リンカが扱うシンボルが減って読み込みが速くなり、内部の呼び出しもPLTを通さずに済む
共有ライブラリの公開されたシンボルは、ほかのモジュールの同じ名前の定義に差し替えられる可能性があるので、内部からの呼び出しもPLTやGOTを通す必要があります。hiddenにすると外から見えなくなり、動的リンカが調べるシンボルの数が減り、内部の呼び出しはPC相対で直接行えます。ほかのライブラリとの名前の衝突も避けられ、公開するABIも小さく保てます。
- A. 暗号化はされません。
- B. 正しい。名前の衝突も防げます。
- C. OSの違いを吸収するものではありません。