Poiché ldd
elenca solo le librerie dinamiche, esiste un modo per estrarre le informazioni sulle librerie statiche utilizzate per creare l'eseguibile?Ottieni l'elenco delle librerie statiche utilizzate in un eseguibile
risposta
ldd <exe filename>
mostra dinamicamente collegati librerie
nm <exe filename>
mostra i simboli nel file.
Per vedere quali simboli provengono da librerie statiche è necessario eseguire nm
contro quelle librerie per ottenere un elenco dei simboli (funzioni, ecc.) In esse, quindi confrontarle con l'elenco di simboli da nm <exe filename>
.
Si confrontano gli elenchi con il comando comm
. Vedi man comm
per i dettagli.
Questo è stato preso da questo forum here.
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.
Non c'è modo di discernere l'ASM RAW, o l'ottimizzazione del compilatore e le modifiche influiscono anche su questo? – MrMesees
A meno che un determinato 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.
Se si dispone del codice sorgente e non si desidera passare attraverso tutto il codice per questo, è possibile generare il file di mappa durante la compilazione per sapere quali librerie statiche sono collegate.
Ad esempio g++ -Xlinker -Map=a.map main.c
, controllare il file della mappa per informazioni sulle librerie statiche collegate.
Non esiste alcun modo per ottenere l'elenco di librerie statiche all'interno di alcuni eseguibili 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 oggetto foo2.o
fosse collegato nell'eseguibile (ammesso che sia necessario un simbolo definito in foo2
, ad esempio in cui si fa riferimento da qualche parte).
Naturalmente, utilizzando nm
o objdump
o readelf
, o su qualche strings
eseguibile ELF può dare alcuni suggerimenti su ciò che i file oggetto (inclusi quelli provenienti da statiche librerie) sono al suo interno, perché vedrete simboli definito in (membri di) quelle librerie statiche (o stringhe letterali utilizzate al loro interno).
che tipo di suggerimenti intendi? Puoi dare degli esempi? Puoi indicarmi la fonte dove posso trovare più di questi suggerimenti? – stackoverflowwww
L'utilizzo di readelf, ad esempio, mostrerà funzioni, oggetti, simboli utilizzati nel file binario. Questi possono servire come suggerimenti per trovare le librerie che sono state utilizzate. Ad esempio si può vedere la funzione Curl_http e sapere che libcurl è molto probabilmente usato dal binario e se non è collegato in modo dinamico deve essere collegato staticamente. – ohgodnotanotherone
- 1. L'equivalente .NET delle librerie statiche?
- 2. Dimensione delle librerie statiche generate da Xcode
- 3. Collega le versioni statiche delle librerie Boost usando CMake
- 4. Perché cmake_link_libraries include librerie statiche?
- 5. ctypes per librerie statiche?
- 6. Combinando librerie statiche
- 7. Combina librerie statiche
- 8. Miscelazione di librerie statiche e librerie condivise
- 9. Gestione delle dipendenze nelle librerie statiche con cocoapod
- 10. Perché le intestazioni delle librerie statiche non vengono trovate?
- 11. estratto librerie collegate staticamente da un eseguibile
- 12. Qual è il processo corretto per collegare librerie statiche che hanno librerie statiche comuni?
- 13. Ispettore di librerie statiche per Windows?
- 14. iPhone - Librerie statiche, scopo di "Copiare intestazioni"?
- 15. Ottieni proprietà statiche tramite stringa
- 16. Come unire due librerie statiche "ar" in una
- 17. Costruisci librerie statiche Graphviz per iOS
- 18. Xcode Librerie statiche multiple e simboli duplicati
- 19. Differenza tra librerie statiche e condivise?
- 20. Ho librerie boost statiche o dinamiche?
- 21. Ottieni un elenco di gemme utilizzate da un progetto Bundler
- 22. Creazione di OpenCV come librerie statiche
- 23. Perché C# non ha librerie statiche in stile C++?
- 24. Come creare boost di librerie statiche?
- 25. Perché i simboli delle librerie statiche non sono inclusi in dSYM durante l'archiviazione?
- 26. Quali sono le migliori pratiche per ridurre la dimensione delle librerie statiche in ogg-c?
- 27. Localizzazione delle meteore/confronto delle librerie i18n
- 28. Sovraccarico delle prestazioni delle librerie javascript
- 29. Ottieni fratelli in JavaScript, senza librerie
- 30. Netbeans: come includere altri progetti di librerie statiche in C++?
Come @Goz e anon puntano, questo funziona solo se il file binario non è stato rimosso/contiene informazioni di debug. I nomi non sono necessari (e nemmeno utilizzati) dopo che una libreria statica è stata collegata a un'applicazione: le chiamate sono tutte per indirizzo. –
Questo non risponde alla domanda. "eseguire nm contro quelle librerie" non è possibile se non si conoscono le librerie; e ci sono librerie usate implicitamente nel collegamento. – kavadias
Se è un binario sconosciuto, non sappiamo quali librerie sono presenti. Quindi "correre nm contro quelle librerie" sembra controproducente. – goldenmean