Auflisten einiger Funktionen von Bibliotheken unter Linux?

0

Während ich einige Tests auf meinem Linux-Rechner durchführe, muss ich herausfinden, welche Funktionen zu einer Bibliothek gehören.

Ich habe den Bash-Befehl "ldconfig -p" verwendet, in dem einige Bibliotheken aufgelistet sind.

Aber wie listet man die Funktionen auf?

Tech-IO
quelle
Was versuchst du zu machen? Dateien auflisten? Symbole in einer Bibliothek auflisten? Ein Symbol zur Laufzeit suchen?
Attie
Es ist sehr wahrscheinlich, dass die Bibliothek, nach der Sie suchen, derzeit nicht auf Ihrem System verfügbar ist. Möglicherweise müssen Sie sie installieren.
Attie
Es tut mir leid, dass ich etwas falsch verstanden habe, diese Bibliotheken waren keine Bibliotheken. Ja, ich muss die Symbole (Funktionen?) Einer Bibliothek auflisten, z. libc.
Tech-IO

Antworten:

1

Benutzen objdump -tT ${FILE} oder 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
[...]

Im objdump Ausgabe von:

  • Beliebiges Symbol markiert *UND* in einer anderen Bibliothek ansässig ist ( dynamisch verknüpft )
    • zum Beispiel free, write, usw...
  • Jedes Symbol mit einem Abschnitt (z. B .: .init oder .text ) ist in dieser Bibliothek ansässig
    • zum Beispiel gzdopen, gzclose, usw...

Sie können verwenden ldd um herauszufinden, mit welchen Bibliotheken eine Binärdatei (ausführbare Datei oder Bibliothek) verknüpft ist:

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