いリストのシンボル。うファイル
-
09-06-2019 - |
質問
いリストの記号を輸出しているから。うファイルとは何ですか?できれば、たいものを知られたくなかったからソース(例えばなっからの静的ライブラリ).
を使用していgcc4.0.2ばれました
解決
標準ツール上場のシンボルは nm
, で無い場合、お名前をお書き添えばこのように:
nm -g yourLib.so
を確認したい場合には記号のC++図書館、"-C"オプションdemangleの記号(分で読みやすくするためにdemangled).
nm -gC yourLib.so
場合おります。うファイルはエルフ形式のは、二つのオプション:
のいずれか objdump
(-C
も便利ですdemangling C++のみ):
$ objdump -TC libz.so
libz.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
0000000000002010 l d .init 0000000000000000 .init
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 free
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __errno_location
0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable
または使用 readelf
:
$ readelf -Ws libz.so
Symbol table '.dynsym' contains 112 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000002010 0 SECTION LOCAL DEFAULT 10
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.2.5 (14)
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __errno_location@GLIBC_2.2.5 (14)
4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable
他のヒント
の場合 .so
ファイルはelf形式を使用できreadelfプログラムに抽出すシンボル情報をバイナリー.このコマンドでのシンボルテーブル:
readelf -Ws /usr/lib/libexample.so
だから抽出すべき方で規定されているこ .so
ファイルではなく、図書館によって参照されるのです。七つのカラムが含まれる必要があ番号ます。できるエキスを使用することにより簡単な正規表現:
readelf -Ws /usr/lib/libstdc++.so.6 | grep '^\([[:space:]]\+[^[:space:]]\+\)\{6\}[[:space:]]\+[[:digit:]]\+'
または、していることが示唆された Caspin,:
readelf -Ws /usr/lib/libstdc++.so.6 | awk '{print $8}';
objdump -TC /usr/lib/libexample.so
のための共有ライブラリlibNAME.そのスイッチが必要でした見のシンボルマLinux
nm -D libNAME.so
および静的ライブラリとして報告その他
nm -g libNAME.a
り上がったはずなんだろうな -fvisibility=隠し や #pragma GCCの視認性 なされているわけではなさそうだしているので、すべてのシンボルが常に見える nm またこの後この問題について意見を交わして readelf や objdump, をしたことのなかった私にとってはあえることで、実際に 二つの シンボルテーブル:
- にすることもできるのでリスト nm
- にすることもできるのでリスト readelf や objdump
と思い、旧contains debugging symbolsことができ剥 ストリップ または、-sスイッチすることができ、リンカーの 設置 コマンドです。とてもnmなリストものも、輸出の記号も輸出があるからでELF"ダイナミックシンボルテーブルは、後になります。
加えてみl、nmフラグを取得するためのソースのシンボルです。場合には図書館が作成とデバッグ情報(gcc-g)このソースファイルと行番号です。としてのKonradと、オブジェクトファイル/静的ライブラリであろう未知のことです。
Android .so
ファイルは、日本電磁測器株式会ツールチェーンが付属し、必要なツールのその他の回答: readelf
, objdump
や nm
.
C++ .so
ファイルの場合、最終 nm
コマンド nm --demangle --dynamic --defined-only --extern-only <my.so>
# nm --demangle --dynamic --defined-only --extern-only /usr/lib64/libqpid-proton-cpp.so | grep work | grep add
0000000000049500 T proton::work_queue::add(proton::internal::v03::work)
0000000000049580 T proton::work_queue::add(proton::void_function0&)
000000000002e7b0 W proton::work_queue::impl::add_void(proton::internal::v03::work)
000000000002b1f0 T proton::container::impl::add_work_queue()
000000000002dc50 T proton::container::impl::container_work_queue::add(proton::internal::v03::work)
000000000002db60 T proton::container::impl::connection_work_queue::add(proton::internal::v03::work)
で利用できます nm -g
ツールからの助ツールチェーン.しかし、そのソースは必ずしも容易に可能です。見たいな方法が良いと思いますもとこの情報は常に取得されます。か objcopy
明らかにすることができる。
/編集:ツールの名前はもちろん nm
.フラグ -g
でも使われるようになっていけ輸出にならない。
nm-gのextern変数である必要はな輸出される。非静的ファイルの範囲の変数(C)すべてextern可変となります。
nm-Dのリストのシンボルの動的テーブルまでのアドレスによるdlsym.
nm--version
GNU nm2.17.50.0.6-12.el5 20061020
だいがある場合は記号 現在の 利用できる
objdump -h /path/to/object
またはリストのデバッグ情報
objdump -g /path/to/object