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

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

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

1 ответ1

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .