Come si specificano le funzioni disponibili, ecc contenuti in una libreria compilata?

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

Domanda

Come faccio a determinare se esiste una funzione all'interno di una libreria, o un elenco delle funzioni in una libreria compilata?

È stato utile?

Soluzione

È possibile utilizzare il nm comando per elencare i simboli in statica librerie.

nm -g -C <libMylib.a>

Altri suggerimenti

Per binari ELF, è possibile utilizzare readelf:

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: i simboli della lista -W: non tagliare i nomi troppo lunghi

Il comando awk poi filtrare tutte le funzioni, e C ++ filt li unmangle. Ciò significa che li convertirà da una schema di denominazione interna in modo che siano visualizzati in forma leggibile. Produce nomi simili a questo (tratto da boost.filesystem lib):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

Senza c ++ filt, il nome viene visualizzato come _ZN5boost9exceptionD0Ev

Per gli strumenti di Microsoft, "link /dump /symbols <filename>" vi darà i dettagli cruenti. Probabilmente ci sono altri modi (o opzioni), a rendere più facile da leggere messa in vendita.

Sotto Linux / Unix è possibile utilizzare objdump -T per elencare i simboli esportati contenuti in un determinato oggetto. In Windows c'è dumpbin (IIRC dumpbin /exports). Si noti che i nomi delle funzioni C ++ sono alterati in modo da consentire sovraccarichi.

EDIT: dopo aver visto di codelogic anwser mi sono ricordato che objdump capisce anche -C per eseguire de-mutilazione.

utilizzare questo comando:

objdump -t "your-library"

Sarà stampare più di quanto si vuole - non solo funzionare i nomi, ma l'intera tabella dei simboli. Controllare i vari attributi dei simboli si ottiene, e sarete in grado di risolvere le funzioni di variabili e cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top