Як переглянути список функцій, які експортує спільна бібліотека Linux?


190

Я хочу переглянути експортовані функції спільної бібліотеки в Linux.

Яка команда дозволяє мені це зробити?

(У Windows я використовую програму залежить)


Відповіді:


313

Що вам потрібно - це nmі його -Dваріант:

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

Експортовані суми позначені символом a T. Обов’язкові символи, які повинні бути завантажені з інших спільних об'єктів, мають a U. Зауважте, що таблиця символів не включає лише функції, але й експортовані змінні.

Додаткову інформацію див nm . На сторінці керівництва .


18
Або якщо ви хочете бачити лише експортовані символи, додайте прапор "- визначено лише". наприклад: "nm -D - визначено лише /lib/libtest.so"
Шервін Емамі

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? Це дає мені переважну кількість продукції.
Юрай Мартинка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.