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

実行ファイルにstripコマンドを使ったときに起こることとして正しいものはどれか。

  1. A機械語の命令が最適化されて、実行が速くなる
  2. B実行ファイルが暗号化され、ほかの人が実行できなくなる
  3. Cシンボル表やデバッグ情報が取り除かれ、ファイルは小さくなるが、デバッガで関数名などが見えにくくなる
答えと解説を見る

正解:C. シンボル表やデバッグ情報が取り除かれ、ファイルは小さくなるが、デバッガで関数名などが見えにくくなる

実行ファイルには、関数や変数の名前を並べたシンボル表や、ソースコードの行との対応を表すデバッグ情報が含まれることがあります。これらは実行には不要なので、stripで取り除くとファイルが小さくなります。ただし不具合の調査で関数名や行番号を見られなくなるので、取り除く前の情報を別に保管しておくこともあります。動的リンクに必要なシンボルは残ります。

  • A. 命令は変わらないので、速さも変わりません。
  • B. 暗号化はしません。
  • C. 正しい。実行に必要ない情報を削ります。
この分野を解く 分野ページへ

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

  1. リンカでの弱いシンボル(weak symbol)の扱いとして正しいものはどれか。
  2. C++のコンパイラが関数名に引数の型などの情報を付け加えてシンボル名を作る「名前修飾(マングリング)」の主な目的はどれか。
  3. Linuxのdlopen関数(WindowsのLoadLibraryに相当)の使い道として最も適切なものはどれか。
  4. 100個のプロセスが同じ共有ライブラリを使っているとき、物理メモリの使い方として正しいものはどれか。
  5. オブジェクトファイルを逆アセンブルすると、外部の関数printfを呼ぶ命令の飛び先が0のように仮の値になっていた。この値はいつ正しく埋められるか。