Как просмотреть список функций, которые экспортирует разделяемая библиотека Linux?


192

Я хочу просмотреть экспортированные функции общей библиотеки в Linux.

Какая команда позволяет мне это сделать?

(От винды я пользуюсь программой зависит)


Ответы:


315

Что вам нужно nmи его -Dвариант:

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

Экспортируемые символы обозначаются как T. Обязательные символы, которые должны быть загружены из других общих объектов, имеют U. Обратите внимание, что таблица символов включает в себя не только функции, но и экспортируемые переменные.

Смотрите nm страницу руководства для получения дополнительной информации.


18
Или, если вы хотите видеть только экспортированные символы, добавьте флаг «--defined-only». Например: «nm -D --defined-only /lib/libtest.so»
Шервин Эмами

3
В Mac OS X просто используйте nmбез -Dфлага.
JPaget



2

Среди других уже упомянутых инструментов вы можете использовать также 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.