0
我有一個可執行文件,它調用一個函數。有很多靜態和動態庫與這個EXE鏈接。我需要知道哪一個提供這個功能。如何知道庫函數在哪個位置?
我有一個可執行文件,它調用一個函數。有很多靜態和動態庫與這個EXE鏈接。我需要知道哪一個提供這個功能。如何知道庫函數在哪個位置?
你可以使用可執行FOO這樣的共享庫的列表:
ldd -v foo
這篇文章:
How do I list the symbols in a .so file
說明如何列出一個符號(導出函數)共享庫。
nm -C foo
同樣的命令也將列出所有導出符號的名稱(函數名):
如果你的庫是靜態連接的,它會在可執行文件本身內部的符號列表中顯示出來一個靜態庫:
nm -C libasan.a
你可能想要構建一個shell腳本來枚舉你的庫,尋找你想要的每個內部的特定函數。例如,要確定哪個.a文件提供了sprintf():
for x in *.a; do echo --- ${x} ---; nm -C $x | grep sprintf ; done