Es gibt keine libc-Funktion, das zu tun. Sie können jedoch selbst eine schreiben (obwohl der Code etwas beteiligt ist).
Unter Linux dlopen()
in der Tat gibt die Adresse eines link_map
Struktur, die ein Mitglied benannt hat l_addr
, die auf die Basisadresse des geladenen gemeinsamen Objekt verweist (vorausgesetzt, Ihr System nicht Bibliothek Platzierung geteilt RANDOMIZE, und dass Ihre Bibliothek wurde nicht verlinkt).
Unter Linux ist eine sichere Methode, die Basisadresse (die Adresse 10) zu finden, dl_iterate_phdr()
nach dlopen()
in der Bibliothek zu verwenden.
die ELF-Header zu haben, sollten Sie in der Lage sein, eine Liste der exportierten Symbole iterieren (die dynamische Symboltabelle), indem Sie zuerst die Elf*_Phdr
vom Typ Ortung PT_DYNAMIC
und dann Lokalisieren DT_SYMTAB
, DT_STRTAB
Einträge und alle Symbole iterieren in der dynamischen Symboltabelle. Verwenden Sie /usr/include/elf.h
, um Sie zu führen.
Zusätzlich könnten Sie libelf verwenden, aber ich kann Sie nicht führen, da ich keine vorherige Erfahrung damit habe.
Schließlich ist die Übung etwas zwecklos: Sie erhalten eine Liste definierter Funktionen, aber Sie werden keine Ahnung haben, wie Sie sie nennen sollen (welche Parameter erwarten sie). Worum geht es also?
Es klingt für mich wie das OP eine Liste der exportierten Symbole aus der Bibliothek zu erhalten sucht. Was ich nicht für möglich halte, ohne einige Abschnitte in der ELF-Struktur zu analysieren. –