Câu trả lời:
Những gì bạn cần là nm
và -D
tùy chọn của nó :
$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.
Sumbols xuất khẩu được chỉ định bởi a T
. Các ký hiệu bắt buộc phải được tải từ các đối tượng chia sẻ khác có a U
. Lưu ý rằng bảng ký hiệu không chỉ bao gồm các hàm, mà còn xuất các biến.
Xem nm
trang hướng dẫn để biết thêm thông tin.
nm
mà không có -D
cờ.
objdump -T *.so
cũng có thể làm công việc
Trên MAC, bạn cần sử dụng nm *.o | c++filt
, vì không có -C
tùy chọn nào trong nm
.
Trong số các công cụ đã được đề cập khác, bạn cũng có thể sử dụng readelf
( thủ công ). Nó tương tự objdump
nhưng đi sâu vào chi tiết hơn. Xem điều này để giải thích sự khác biệt.
$ readelf -sW /lib/liblzma.so.5 |head -n10
Symbol table '.dynsym' contains 128 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 00000000 0 NOTYPE LOCAL DEFAULT UND
1: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_unlock@GLIBC_2.0 (4)
2: 00000000 0 FUNC GLOBAL DEFAULT UND pthread_mutex_destroy@GLIBC_2.0 (4)
3: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable
4: 00000000 0 FUNC GLOBAL DEFAULT UND memmove@GLIBC_2.0 (5)
5: 00000000 0 FUNC GLOBAL DEFAULT UND free@GLIBC_2.0 (5)
6: 00000000 0 FUNC GLOBAL DEFAULT UND memcpy@GLIBC_2.0 (5)