ฉันจะดูรายการฟังก์ชั่นที่ไลบรารีที่แชร์ของ Linux ส่งออกได้อย่างไร


190

ฉันต้องการดูฟังก์ชั่นที่ส่งออกของห้องสมุดสาธารณะบน Linux

คำสั่งอะไรที่อนุญาตให้ฉันทำสิ่งนี้?

(ใน Windows ฉันใช้โปรแกรมขึ้นอยู่กับ)


คำตอบ:


313

สิ่งที่คุณต้องการคือnmและ-Dตัวเลือก:

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
         U atanf
         U calloc
.
.
.

sumbols Tส่งออกจะมีการแสดง สัญลักษณ์ที่จำเป็นที่จะต้องโหลดจากวัตถุที่ใช้ร่วมกันอื่น ๆ Uที่มี โปรดทราบว่าตารางสัญลักษณ์ไม่ได้รวมเฉพาะฟังก์ชั่น แต่ส่งออกตัวแปรเช่นกัน

ดูnm หน้าคู่มือสำหรับข้อมูลเพิ่มเติม


18
หรือหากคุณต้องการเห็นสัญลักษณ์ที่ส่งออกให้เพิ่มการตั้งค่าสถานะ "--defined-only" เช่น: "nm -D --defined-only /lib/libtest.so"
Shervin Emami

3
ใน Mac OS X เพียงใช้nmโดยไม่มีการ-Dตั้งค่าสถานะ
JPaget



1

ในบรรดาเครื่องมือที่กล่าวถึงอื่น ๆ ที่คุณสามารถใช้readelf( คู่มือ ) มันคล้ายกับobjdumpแต่ไปลงรายละเอียดเพิ่มเติม ดูสิ่งนี้สำหรับคำอธิบายที่แตกต่าง

$ 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)

ฉันควรจะหาสัญลักษณ์ที่ส่งออกโดยใช้ readelf ได้อย่างไร มันให้ผลลัพธ์ที่ล้นหลาม
Juraj Martinka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.