Puisque ldd
répertorie uniquement les bibliothèques dynamiques, existe-t-il un moyen d'extraire les informations sur les bibliothèques statiques utilisées pour créer l'exécutable?
Non, les noms des bibliothèques sont supprimés pendant le processus de liaison. Cependant, si votre exécutable contient des informations de débogage (c'est-à-dire qu'il a été compilé avec l'indicateur -g), vous pourrez peut-être en obtenir des informations.
Si vous avez le code source et que vous ne voulez pas parcourir tout le code pour cela, vous pouvez générer un fichier de carte lors de la compilation pour savoir quelles bibliothèques statiques sont liées.
Par exemple g++ -Xlinker -Map=a.map main.c
, consultez le fichier de carte pour obtenir des informations sur la bibliothèque statique liée.
Il n'y a aucun moyen d'obtenir la liste des bibliothèques statiques dans certains exécutables ELF .
Parce que pour l'éditeur de liens, une bibliothèque statique est simplement utilisée comme un ensemble de membres "paresseux". Ainsi, l'exécutable ELF résultant ne contiendrait que les membres nécessaires pour le lier. Les membres aiment donc foo2.o
de libfoo.a
sont liés comme si le fichier d'objet foo2.o
était lié à l'exécutable (à condition qu'un symbole soit défini dans foo2
est nécessaire, c'est-à-dire référencé quelque part).
Bien sûr, l'utilisation de nm
, ou objdump
, ou readelf
, ou strings
sur certains exécutables ELF peut donner des indications sur les fichiers objets (y compris ceux qui viennent des bibliothèques statiques ) se trouvent à l'intérieur, car vous verrez des symboles définis dans (les membres de) ces bibliothèques statiques (ou des chaînes littérales utilisées à l'intérieur).
Sauf si un compilateur donné stocke une sorte de métadonnées dans le binaire, non. Une bibliothèque statique est un code qui est directement compilé dans le binaire.