Linux paylaşılan kitaplığının dışa aktardığı işlevlerin listesini nasıl görüntülerim?


Yanıtlar:


313

İhtiyacınız olan şey nmve -Dseçeneği:

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

İhraç edilen sumboller a ile gösterilir T. Diğer paylaşılan nesnelerden yüklenmesi gereken semboller için a U. Sembol tablosunun yalnızca işlevler değil, dışa aktarılan değişkenler de içerdiğini unutmayın.

Daha fazla bilgi için nm kılavuz sayfasına bakınız .


18
Veya yalnızca dışa aktarılan sembolleri görmek istiyorsanız "--defined-only" (yalnızca tanımlanmış) bayrağını ekleyin. örneğin: "nm -D - yalnızca tanımlanmış / lib/libtest.so"
Shervin Emami

3
Mac OS X'te bayrak nmolmadan kullanın -D.
JPaget


8

Bir MAC'de, içinde seçenek nm *.o | c++filtolmadığı için kullanmanız gerekir .-Cnm


1

Daha önce bahsedilen diğer araçların yanı sıra kullanabilirsiniz readelf( manuel ). Buna benzer, objdumpancak daha ayrıntılı olarak gider. Bkz bu farkın açıklama için.

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

Kendini kullanarak dışa aktarılan sembolleri nasıl bulabilirim? Bana çok büyük miktarda çıktı veriyor.
Juraj Martinka
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.