• ベストアンサー

UNIX上のプログラムで使うライブラリの中身を知る方法

過去にUNIX上で動作するプログラムを作成していて、その中で多数の.aや.so(標準では無く、オリジナルのもの。)を使っているのですが、.aや.so内にどのような関数があるのか、もしくはそのライブラリに関係するソース名は何か知る手段ってありませんか? かなり前のものなので、関数仕様書もmakefileも無いため、何をライブラリとしているのか分からず困っています。 駄目もとで、バイナリエディタで中身を確認してみたのですが、何処の情報がそれを示しているかいまいち分かりませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.3

No.2 の方がご回答されているように、nm コマンドを使えばシンボルの一覧を表示できます。 (ex.1) $ nm /usr/local/lib/libssl.so U ASN1_INTEGER_get U ASN1_INTEGER_set U ASN1_check_infinite_end U ASN1_dup U ASN1_get_object U ASN1_object_size U ASN1_put_object U BIO_callback_ctrl U BIO_copy_next_retry U BIO_ctrl U BIO_f_buffer 00027db0 T BIO_f_ssl ただし、U となっているものはライブラリ内で未定義のシンボル (変数や関数) であり、他のライブラリによって解決されなければならないものだったと思います。 また、ライブラリが strip コマンドによって strip されてしまっている場合はシンボルテーブルが削除されてしまうため確認できません。 (ex.2) $ nm /usr/lib/libstdc++.so.5 nm: /usr/lib/libstdc++.so.5: シンボルがありません

ari_els
質問者

お礼

先程、試しにやってみましたが、 不要な情報もかなり出てくるので、使い方を調べています。 でも、これで糸口がつかめそうです。 情報ありがとうございました。

その他の回答 (2)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

nmコマンドを使えば?

参考URL:
http://www.linux.or.jp/JM/html/GNU_binutils/man1/nm.1.html
ari_els
質問者

お礼

試しにやってみました。 かなり訳が分からない情報も混ざっていますが、糸口はつかめそうな感じです。 ありがとうございました。

  • galoon
  • ベストアンサー率28% (38/133)
回答No.1

ヘッダーファイルなどは用意されていませんでしょうか? まれに、ヘッダーファイルに記載されていない隠れ関数がありますが、たいていは記載されている範囲で満足できると思いますよ。

ari_els
質問者

お礼

情報ありがとうございます。 ヘッダファイルはどこかにあると思われますが、ファイル数が半端ではないのでちょっと探すのは困難な状況です。ライブラリと同一名のヘッダでも見つかれば良いのですが、なかなかヒットさせるのは難しいんですよね。

関連するQ&A