如何在.so文件中列出符號

如何列出從.so文件導出的符號? 若是可能的話,我也想知道它們的來源(例如,若是它們是從靜態庫中提取的)。 c++

我正在使用gcc 4.0.2,若是有區別的話。 git


#1樓

對於共享庫libNAME.so,必須使用-D開關才能在Linux中查看符號 正則表達式

nm -D libNAME.so

以及其餘人報告的靜態庫 工具

nm -g libNAME.a

#2樓

若是您的.so文件爲elf格式,則能夠使用readelf程序從二進制文件中提取符號信息。 該命令將爲您提供符號表: spa

readelf -Ws /usr/lib/libexample.so

您只應提取在此.so文件中定義的文件,而不是在該文件所引用的庫中的文件。 在這種狀況下,第七列應包含一個數字。 您能夠使用簡單的正則表達式將其提取: code

readelf -Ws /usr/lib/libstdc++.so.6 | grep '^\([[:space:]]\+[^[:space:]]\+\)\{6\}[[:space:]]\+[[:digit:]]\+'

或者,按照Caspin的建議: get

readelf -Ws /usr/lib/libstdc++.so.6 | awk '{print $8}';

#3樓

objdump -TC /usr/lib/libexample.so

#4樓

對於Android .so文件,NDK工具鏈附帶了其餘答案中提到的必需工具: readelfobjdumpnmit


#5樓

您能夠使用binutils工具鏈中的nm -g工具。 可是,它們的來源並不老是隨時可用。 並且我什至不肯定該信息是否老是能夠檢索到。 也許objcopy揭示了更多信息。 io

/編輯:該工具的名稱固然是nm 。 標誌-g用於僅顯示導出的符號。 awk

相關文章
相關標籤/搜索