Làm cách nào để xem danh sách các chức năng mà thư viện chia sẻ Linux đang xuất?


Câu trả lời:


307

Những gì bạn cần là nm-Dtù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.


18
Hoặc nếu bạn chỉ muốn xem các biểu tượng được xuất, hãy thêm cờ "- chỉ xác định". ví dụ: "nm -D - chỉ xác định /lib/libtest.so"
Shervin Emami

3
Trên Mac OS X chỉ cần sử dụng nmmà không có -Dcờ.
JPaget


8

Trên MAC, bạn cần sử dụng nm *.o | c++filt, vì không có -Ctùy chọn nào trong nm.


1

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ự objdumpnhư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)

Làm thế nào tôi có thể tìm thấy các biểu tượng xuất khẩu bằng cách sử dụng readelf? Nó mang lại cho tôi một lượng sản lượng áp đảo.
Juraj Martinka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.