Linuxサーバより愛を込めて。

Linux(Ubuntu)サーバとダーツを愛する中年サラリーマンの日記。

プログラミング

C言語で作成した実行ファイルと組み込まれたライブラリ

前回作成した実行ファイル「a.out」

前回C言語で作成した実行ファイル「a.out」ですが、ソースを検証する過程でfprintfというライブラリ関数をしていることが分かっています。

 

ではソースがない状態の実行ファイルの中で使用されているライブラリを調べる方法はないものでしょうか?

 

lddコマンドでライブラリを調べる

ということで調べた結果、以下のコマンドで調査できることがわかりました。

 

 

この「ldd」コマンドを使用すると実行ファイルに組み込まれたライブラリを調べることができます。

 

今回の場合は「libc.so.6」がライブラリの名前で「/lib/x86_64-linux-gnu/libc.so.6」がライブラリファイルとなるんですって。

 

では本当にこのライブラリファイルの中身に「fprintf」が含まれているのでしょうか?

 

nmコマンドでライブラリに登録された関数を調べる

続いてはライブラリファイルに登録された関数を調べてみることにします。ここでは「nm」コマンドを用います。

 

 

ありゃ、「no symbols」ですって。調べてみるとnmコマンドで調べられるのは実体のみのようで、シンボリックリンクを含めた調査をする場合「-D」オプションをつける必要があるようです。では改めて。

 

 

はい。沢山出てきました。5行目に「fprintf」があることが確認できます。ではこのfprintf()関数のソースはどうやったらみれるんでしょう?その辺りはまた次回としましょう。

 

まとめると・・・

ソース不明の実行ファイルがあったとして、そこで使用されているライブラリについて調査しようと思った場合

 

  1. lddコマンドを使用すると組み込まれたライブラリ名とライブラリファイルのパスが分かる
  2. nmコマンドを用いるとライブラリファイルに組み込まれた関数を調べることができる

 

以上の方法で調べることが可能となります。

 

次回はライブラリファイルのソースを読む方法について見ていくことにしましょう。

-プログラミング
-,