- ベストアンサー
UNIX上のプログラムで使うライブラリの中身を知る方法
過去にUNIX上で動作するプログラムを作成していて、その中で多数の.aや.so(標準では無く、オリジナルのもの。)を使っているのですが、.aや.so内にどのような関数があるのか、もしくはそのライブラリに関係するソース名は何か知る手段ってありませんか? かなり前のものなので、関数仕様書もmakefileも無いため、何をライブラリとしているのか分からず困っています。 駄目もとで、バイナリエディタで中身を確認してみたのですが、何処の情報がそれを示しているかいまいち分かりませんでした。
- みんなの回答 (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: シンボルがありません
その他の回答 (2)
- rinkun
- ベストアンサー率44% (706/1571)
nmコマンドを使えば?
お礼
試しにやってみました。 かなり訳が分からない情報も混ざっていますが、糸口はつかめそうな感じです。 ありがとうございました。
- galoon
- ベストアンサー率28% (38/133)
ヘッダーファイルなどは用意されていませんでしょうか? まれに、ヘッダーファイルに記載されていない隠れ関数がありますが、たいていは記載されている範囲で満足できると思いますよ。
お礼
情報ありがとうございます。 ヘッダファイルはどこかにあると思われますが、ファイル数が半端ではないのでちょっと探すのは困難な状況です。ライブラリと同一名のヘッダでも見つかれば良いのですが、なかなかヒットさせるのは難しいんですよね。
お礼
先程、試しにやってみましたが、 不要な情報もかなり出てくるので、使い方を調べています。 でも、これで糸口がつかめそうです。 情報ありがとうございました。