2015-08-15 7 views
6

Sto provando a scrivere un programma che elenca tutte le variabili e le funzioni esportate pubblicamente di un programma C o C++ usando Clang.Come ottenere un elenco di tutte le dichiarazioni globali di un programma C/C++ utilizzando Clang?

Ho seguito la parte 05 di this tutorial, ma non funziona per la versione corrente di clang. Oltre a ciò, ho ottenuto some hints che CompilerInstance può rendere il codice più breve, ma non sono del tutto sicuro di come utilizzarlo.

Come implementeresti questa funzionalità? Puoi darmi qualche suggerimento nella giusta direzione? Ad esempio: esiste una grande tabella hash di variabili dichiarate globalmente o devo attraversare l'AST?

+1

Per gli esempi di codice aggiornati utilizzando Clang come libreria, consultare https://github.com/eliben/llvm-clang-samples –

risposta

0

Ho trovato un modo. Il risultato è AutoFFI, un generatore di binding FFI costruito sopra a Clang. Pubblicherò i dettagli su come è fatto se avrò il tempo.

2

pubblicamente esportato - Intendi simboli con collegamento esterno?

È possibile utilizzare nm su file di oggetti, librerie condivise ed eseguibili con le opzioni --extern-only --defined-only --demangle per visualizzare simboli definiti con il collegamento esterno. Il campo del tipo di simbolo indica quale tipo di simbolo è, le variabili globali hanno normalmente i tipi B, b, C, D, d, G, g, R, r, S, se W, per i dati statici membri di modelli dichiarati in file di intestazione e statiche per scope di funzioni.

+0

Sì, è proprio così. Ma mi piacerebbe avere la lista dei simboli direttamente dal codice sorgente in modo da poterli manomettere. – samvv