プロが教えるわが家の防犯対策術!

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

A 回答 (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: シンボルがありません
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/02/01 20:27

nmコマンドを使えば?



参考URL:http://www.linux.or.jp/JM/html/GNU_binutils/man1 …
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/02/01 20:22

ヘッダーファイルなどは用意されていませんでしょうか?


まれに、ヘッダーファイルに記載されていない隠れ関数がありますが、たいていは記載されている範囲で満足できると思いますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/02/01 14:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています