Kann ich eine Liste aller Funktionsnamen aus einer gemeinsam genutzten Bibliothek (nur Linux) programmgesteuert erhalten, wenn ich dl_open()
?
Ich möchte so etwas:
%Vor%Beispielbibliothek (mylib.so)
Kopfzeile (.h):
%Vor%Quelle (.c):
%Vor% Dirty hack, den ich kenne: benutze nm
oder objdump
utility
Dafür gibt es keine libc-Funktion. Sie können jedoch selbst einen Code schreiben (oder den Code aus einem Tool wie Readelf kopieren oder einfügen).
Unter Linux gibt dlopen()
die Adresse einer link_map
-Struktur zurück, die ein Mitglied mit dem Namen l_addr
hat, das auf die Basisadresse des geladenen freigegebenen Objekts zeigt (vorausgesetzt, dass das System die Platzierung der freigegebenen Bibliothek nicht zufällig vornimmt), und dass Ihre Bibliothek nicht verlinkt wurde).
Unter Linux können Sie die Basisadresse (die Adresse von Elf*_Ehdr
) finden, indem Sie dl_iterate_phdr()
nach dlopen()
in der Bibliothek verwenden.
Wenn Sie den ELF-Header verwenden, sollten Sie in der Lage sein, über eine Liste exportierter Symbole (die dynamische Symboltabelle) zu iterieren, indem Sie zuerst Elf*_Phdr
vom Typ PT_DYNAMIC
suchen und dann DT_SYMTAB
, DT_STRTAB
finden. Einträge und Iteration über alle Symbole in der dynamischen Symboltabelle. Verwenden Sie /usr/include/elf.h
, um Sie zu führen.
Zusätzlich könntest du Libelf verwenden, das ich persönlich nicht sehr gut kenne.
Beachten Sie jedoch, dass Sie eine Liste definierter Funktionen erhalten, aber Sie werden nicht wissen, wie Sie sie aufrufen sollen.
Tags und Links c c++ linux shared-libraries dlopen