Ottieni l’elenco delle librerie statiche utilizzate in un eseguibile

Poiché ldd elenca solo le librerie dinamiche, esiste un modo per estrarre le informazioni sulle librerie statiche utilizzate per creare l’eseguibile?

ldd mostra le librerie collegate dynamicmente

nm mostra i simboli nel file.

Per vedere quali simboli provengono da librerie statiche è necessario eseguire nm su quelle librerie per ottenere un elenco dei simboli (funzioni, ecc.) In esse, quindi confrontarle con l’elenco di simboli da nm .

Confronta le liste con il comando comm . Vedi l’ man comm per i dettagli.

Questo è stato preso da questo forum qui .

No, i nomi delle librerie vengono scartati durante il processo di collegamento. Tuttavia, se il tuo eseguibile contiene informazioni di debug (cioè è stato compilato con il flag -g), potresti essere in grado di ottenere informazioni da questo.

Se si dispone del codice sorgente e non si desidera passare tutto il codice per questo, è ansible generare il file di mappa durante la compilazione per sapere quali librerie statiche sono collegate.

Ad esempio g++ -Xlinker -Map=a.map main.c , controlla il file della mappa per informazioni sulle librerie statiche collegate.

A meno che un dato compilatore non memorizzi una sorta di metadati all’interno del file binario, no. Una libreria statica è un codice che viene compilato direttamente nel file binario.

Non c’è modo di ottenere l’elenco delle librerie statiche all’interno di qualche eseguibile ELF .

Perché per il linker, una libreria statica viene semplicemente utilizzata come un insieme di membri “pigri”. Quindi l’eseguibile ELF risultante conterrebbe solo i membri necessari per collegarlo. Quindi membri come foo2.o di libfoo.a sono collegati come se il file object foo2.o fosse collegato all’eseguibile (a condizione che fosse necessario un simbolo definito in foo2 , cioè che sia riferito in qualche luogo).

Ovviamente, l’uso di nm , o objdump o readelf o strings su alcuni eseguibili ELF può dare qualche suggerimento su quali file object (compresi quelli provenienti da librerie statiche ) ci sono dentro, perché vedrai simboli definiti in (membri di) quelle librerie statiche (o stringhe letterali utilizzate al loro interno).