Non esiste una funzione di libc di farlo. Tuttavia, puoi scriverne uno tu stesso (sebbene il codice sia in qualche modo coinvolto).
Su Linux, dlopen()
infatti restituisce l'indirizzo di una struttura link_map
, che ha un membro denominato l_addr
che punta all'indirizzo di base dell'oggetto condiviso caricato (supponendo che il sistema non RANDOMIZE condiviso posizionamento biblioteca, e che il vostro la libreria non è stata prelinkata).
Su Linux, un modo sicuro per trovare l'indirizzo di base (l'indirizzo di Elf*_Ehdr
) è utilizzare dl_iterate_phdr()
dopo la dlopen()
della libreria.
Avere l'intestazione ELF, si dovrebbe essere in grado di iterare su una lista di simboli esportati (tabella dei simboli dinamica), per prima cosa localizzare il Elf*_Phdr
di tipo PT_DYNAMIC
, e quindi localizzare DT_SYMTAB
, DT_STRTAB
voci, e l'iterazione di tutti i simboli nella tabella dei simboli dinamici. Utilizzare /usr/include/elf.h
per guidare l'utente.
Inoltre, è possibile utilizzare libelf, ma non sono in grado di guidarti poiché non ho precedenti esperienze con esso.
Infine, notare che l'esercizio è in qualche modo inutile: si otterrà un elenco di funzioni definite, ma non si ha idea di come chiamarle (quali parametri si aspettano), quindi qual è il punto?
Sembra a me come il PO sta cercando di ottenere un elenco di simboli esportati dalla libreria. Che non penso sia possibile senza fare un po 'di analisi delle sezioni nella struttura ELF. –