Перечислите некоторые функции библиотек в Linux?

293
Tech-IO

Выполняя некоторые тесты на моем Linux-компьютере, мне нужно выяснить, какие функции принадлежат какой-либо библиотеке.

Я использовал команду bash "ldconfig -p", в которой перечислены некоторые библиотеки.

Но как перечислить функции?

0
Что ты пытаешься сделать? Список файлов? Список символов в библиотеке? Найти символ во время выполнения? Attie 5 лет назад 0
Вполне возможно, что нужная вам библиотека сейчас не доступна в вашей системе ... возможно, вам придется ее установить. Attie 5 лет назад 0
Извините, я что-то неправильно понял, эти библиотеки не были библиотеками. Да, мне нужно перечислить символы (функции?) Библиотеки, например, libc. Tech-IO 5 лет назад 0

1 ответ на вопрос

1
Attie

Используйте objdump -tT $или readelf -s $.

$ objdump -T /lib/x86_64-linux-gnu/libz.so.1  /lib/x86_64-linux-gnu/libz.so.1: file format elf64-x86-64  DYNAMIC SYMBOL TABLE: 0000000000001c58 l d .init 0000000000000000 .init 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __snprintf_chk 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 free 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __errno_location 0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 write 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strlen 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.4 __stack_chk_fail 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 snprintf [...] 00000000000024c0 g DF .text 00000000000000f9 ZLIB_1.2.2 adler32_combine 0000000000002ba0 g DF .text 0000000000000005 ZLIB_1.2.3.3 crc32_combine64 0000000000010170 g DF .text 0000000000000074 Base gzdopen 0000000000000000 g DO *ABS* 0000000000000000 ZLIB_1.2.7.1 ZLIB_1.2.7.1 0000000000000000 g DO *ABS* 0000000000000000 ZLIB_1.2.3.3 ZLIB_1.2.3.3 000000000000c780 g DF .text 0000000000000036 Base inflateSyncPoint 00000000000104f0 g DF .text 0000000000000059 ZLIB_1.2.3.5 gzoffset64 0000000000011160 g DF .text 0000000000000005 ZLIB_1.2.5.2 gzgetc_ 0000000000000000 g DO *ABS* 0000000000000000 ZLIB_1.2.3.4 ZLIB_1.2.3.4 0000000000000000 g DO *ABS* 0000000000000000 ZLIB_1.2.3.5 ZLIB_1.2.3.5 00000000000043a0 g DF .text 00000000000000cd ZLIB_1.2.5.2 deflateResetKeep 0000000000010550 g DF .text 0000000000000005 ZLIB_1.2.3.5 gzoffset 000000000000fdd0 g DF .text 0000000000000023 Base gzclose [...] 

В objdumpвыходной:

  • Любой помеченный символ *UND*находится в другой библиотеке ( динамически связан )
    • например free, writeи т.д ...
  • Любой символ с разделом (например: .initили .text) находится в этой библиотеке
    • например gzdopen, gzcloseи т.д ...

Вы можете использовать, lddчтобы узнать, с какими библиотеками связан бинарный файл (исполняемый файл или библиотека):

$ ldd /lib/x86_64-linux-gnu/libz.so.1 linux-vdso.so.1 => (0x00007ffc478f7000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f92da469000) /lib64/ld-linux-x86-64.so.2 (0x00007f92daa4d000) 

Похожие вопросы