Liste der Funktionen in einer gemeinsam genutzten Bibliothek abrufen?

14

Wie kann ich eine Liste der in einer gemeinsam genutzten Objektbibliothek definierten Funktionen abrufen oder herausfinden, ob eine bestimmte Funktion in einer definiert ist?


quelle

Antworten:

15

Auf einem * nix-System gibt es verschiedene ausführbare Dateiformate. a.out war vor einigen Jahren ein verbreitetes Format und heute ist es ELF auf allen wichtigen Systemen in der Nähe.

ELF besteht aus einem Header, der jeden der Dateidatenabschnitte beschreibt.

Das Teil, das Sie suchen, ist die Symboltabelle, in der jedes Symbol (Funktion, Variable) seiner Adresse zugeordnet ist.

Freigegebene Bibliotheken behalten ihre globalen Symbole in einem Abschnitt mit der Bezeichnung .dynsym

Was Sie suchen, sind Symbole der Typfunktion und eine globale Bindung in diesem Abschnitt.

readelf --syms ./libfoo.so gibt eine Ausgabe der Symbole aus.

Auf Solaris und FreeBSD gibt es auch elfdump.

objdumpZeigt auch viele Informationen zu Ihrer Objektdatei an, und Sie können einen Abschnitt mithilfe des -jSchalters angeben .

Echox
quelle
13

Verwenden Sie nm mit dem Schalter -D (dynamic):

$ nm -D /usr/lib/libpng.so
00000000 A PNG12_0
     w _Jv_RegisterClasses
     w __cxa_finalize
     U __fprintf_chk
     w __gmon_start__
     U __longjmp_chk
     U __memcpy_chk
     U __snprintf_chk
     U __stack_chk_fail
     U _setjmp
     U abort
     U crc32
     U deflate
     U deflateEnd
     U deflateInit2_
     U deflateReset
     U fflush
     U fread
     U free
     U fwrite
     U gmtime
     U inflate
     U inflateEnd
     U inflateInit_
     U inflateReset
     U malloc
     U memcmp
     U memcpy
     U memset
00003fd0 T png_access_version_number
00016ef0 T png_build_grayscale_palette
00004810 T png_check_sig
0001d2d0 T png_chunk_error
0001d070 T png_chunk_warning
00013390 T png_convert_from_struct_tm
00014a90 T png_convert_from_time_t
000048d0 T png_convert_to_rfc1123
000051b0 T png_create_info_struct
00013040 T png_create_read_struct
00012c20 T png_create_read_struct_2
00014a40 T png_create_write_struct
00014710 T png_create_write_struct_2
00004230 T png_data_freer
00005140 T png_destroy_info_struct
00010eb0 T png_destroy_read_struct
00013da0 T png_destroy_write_struct
0001d0f0 T png_error
0001ca10 T png_free
00004a50 T png_free_data
0001c9d0 T png_free_default
...
fschmitt
quelle