[英]How can I look inside a Linux .so or .a object and see what functions they contain?
鏈接器大概可以做到這一點,那么是否有命令行工具可以列出目標文件中的函數並告訴我函數的名稱及其簽名?
對於共享庫,您必須使用:
nm -D /path/to/libwhatever.so.<num>
如果沒有-D
, nm
轉儲調試符號; -D
指的是實際用於動態鏈接的動態符號。 從 Ubuntu 12 會話:
$ nm /lib/i386-linux-gnu/libc.so.6
nm: /lib/i386-linux-gnu/libc.so.6: no symbols
$ nm -D /lib/i386-linux-gnu/libc.so.6 | tail
0011fc20 T xdr_wrapstring
001202c0 T xdrmem_create
00115540 T xdrrec_create
001157f0 T xdrrec_endofrecord
00115740 T xdrrec_eof
00115690 T xdrrec_skiprecord
00120980 T xdrstdio_create
00120c70 T xencrypt
0011d330 T xprt_register
0011d450 T xprt_unregister
在這個系統上libc.so
被剝離了調試符號,所以nm
什么也不顯示; 但當然有nm -D
揭示的動態鏈接機制的符號。
對於.a
存檔或.o
目標文件,只需nm
。 符號就是符號; 如果這些文件被剝離,則這些對象不能用於鏈接。
正如這個類似的問題所涵蓋的:
導出的 sumbol 由
T
表示。 必須從其他共享對象加載的必需符號具有U
。 請注意,符號表不僅包括函數,還包括導出的變量。
或者,如果您只想查看導出的符號,請添加
--defined-only
標志。 例如:nm -D --defined-only /lib/libtest.so
你可以執行nm Linux.so
,它會顯示 .so 文件中的函數和變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.