Các công cụ tiêu chuẩn cho các ký hiệu niêm yết là nm
, bạn có thể sử dụng nó chỉ đơn giản như thế này:
nm -g yourLib.so
Nếu bạn muốn xem biểu tượng của C++ thư viện, thêm tùy chọn "C" mà demangle những biểu tượng (nó dễ bị đọc nhiều hơn).
nm -gC yourLib.so
Nếu tập tin .so của bạn là ở định dạng tinh, bạn có hai lựa chọn:
Hoặc objdump
(-C
cũng hữu ích cho 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
Hoặc sử dụng 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 [email protected]_2.2.5 (14)
3: 0000000000000000 0 FUNC GLOBAL DEFAULT UND [email protected]_2.2.5 (14)
4: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable
Nguồn
2008-08-29 17:21:08
Nền tảng làm nên sự khác biệt. Apple cung cấp một GCC 4.0, nhưng 'nm' của nó không đáp ứng với một số tùy chọn, như' -D' và '-g' (IIRC). – jww
Điều này sẽ không in được gì trên Mac OS. –
@jww vì đó là BSD 'nm', chứ không phải GNU' nm'. – OrangeDog