Identifier les dépendances à une bibliothèque

Le
Olivier Miakinen
Bonjour,

Afin de remplacer une très vieille version d'une bibliothèque
(library en anglais) dans un programme qui l'utilise, je cherche
à identifier tous les symboles utilisés (fonctions en particulier).

Comme je ne suis pas sûr d'être très clair, je précise ce que je
veux dire.

++
Un programme dont j'ai les sources utilise la bibliothèque UCD-SNMP
dans une version datée, si je ne m'abuse, du 4 décembre 2000.
Cette bibliothèque a forcément évolué depuis, jusqu'à son nom qui
est devenu NET-SNMP <http://www.net-snmp.org/>. Afin d'évaluer la
quantité de travail à fournir pour remplacer UCD-SNMP 2000 par
NET-SNMP 2013, je voudrais identifier tous les points d'adhérence.
Bien sûr je peux le faire en lisant tout le code source, mais je
me demande s'il ne serait pas possible de le faire via une commande
unix sur l'exécutable.

J'ai lu la page man de 'nm' sur Linux, qui m'a aussi renvoyé aux man
de 'readelf' et 'objdump', mais je n'ai pas réussi à trouver ce que
je cherchais -- ce qui ne veut pas dire que ça n'existe pas, c'est
peut-être juste que j'ai mal regardé.
++

Et donc, en bref, voici ce que je cherche : sachant qu'une bibliothèque
fournit les symboles truc, bidule, chose, machin, et ainsi de suite,
mais qu'un programme n'utilise que les symboles bidule et chose et
pas truc et machin, comment faire pour obtenir cette liste de symboles
utilisés ?

Je précise que je ne suis pas limité à Linux : s'il est plus facile
d'utiliser des outils spécifiques Sun ou AIX, ça peut se faire aussi.
Et également sur Windows, mais bon, je n'aime pas beaucoup Windows,
alors je préfèrerais rester sur Unix-like (d'autant qu'alors on
serait hors-charte dans le groupe f.c.o.unix).

Cordialement,
--
Olivier Miakinen
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Tanguy Ortolo
Le #25465622
Olivier Miakinen, 2013-06-07 16:51+0200:
Afin de remplacer une très vieille version d'une bibliothèque
(library en anglais) dans un programme qui l'utilise, je cherche
à identifier tous les symboles utilisés (fonctions en particulier).



nm --dynamic ?

Les fonctions à importer depuis une autre bibliothèque sont marquée U
(undefined).

--
. o .
. . o Tanguy
o o o
Alain Ketterlin
Le #25465612
Olivier Miakinen
[...]
Et donc, en bref, voici ce que je cherche : sachant qu'une bibliothè que
fournit les symboles truc, bidule, chose, machin, et ainsi de suite,
mais qu'un programme n'utilise que les symboles bidule et chose et
pas truc et machin, comment faire pour obtenir cette liste de symboles
utilisés ?



Est-ce que "nm -D" ne fournit pas ce que tu cherches ? J'ai l'impression
qu'il te suffit de regarder ce qui est flaggé U, et de croiser avec ce
que fournis ta lib... Je ne pense pas qu'il soit possible d'avoir
quelque chose de plus précis

-- Alain.

P/S: je parle de ELF sous Linux, je ne sais pas pour les autres
Olivier Miakinen
Le #25465832
Bonjour,

Le 07/06/2013 17:02, Tanguy Ortolo a écrit :

nm --dynamic ?

Les fonctions à importer depuis une autre bibliothèque sont marquée U
(undefined).



Le 07/06/2013 17:12, Alain Ketterlin a écrit :

Est-ce que "nm -D" ne fournit pas ce que tu cherches ? J'ai l'impression
qu'il te suffit de regarder ce qui est flaggé U, [...]



Merci à tous les deux, malheureusement ça ne fonctionne pas. Je suppose
que la bibliothèque doit être liée en statique, et que c'est pour ça que
les fonctions qui m'intéressent sont marquées T et pas U. Inversement,
il y a tellement de fonctions marquées T que ça ne m'avance pas plus
que le nm sur la bibliothèque elle-même.

Bon, eh bien je crois que je vais devoir me plonger directement dans le
code source !
Nicolas George
Le #25465852
Olivier Miakinen , dans le message a écrit :
Merci à tous les deux, malheureusement ça ne fonctionne pas. Je suppose
que la bibliothèque doit être liée en statique, et que c'est pour ça que
les fonctions qui m'intéressent sont marquées T et pas U. Inversement,
il y a tellement de fonctions marquées T que ça ne m'avance pas plus
que le nm sur la bibliothèque elle-même.



Tu peux comparer la liste des symboles définis dans le binaire avec ceux
définis dans l'archive de la bibliothèque originale, si tu arrives à mettre
la main dessus.

Heureusement pour toi que le binaire n'a pas été stripé.
Olivier Miakinen
Le #25466102
Le 07/06/2013 18:56, Nicolas George a écrit :

Tu peux comparer la liste des symboles définis dans le binaire avec ceux
définis dans l'archive de la bibliothèque originale, si tu arrives à mettre
la main dessus.



Non seulement j'ai la bibliothèque originale, mais j'ai même son code
source complet et tout ce qu'il faut pour la recompiler. C'est juste
la flemme de devoir fouiller dans les fichiers source qui me faisait
me demander s'il existait une méthode plus rapide.

Cela dit, ayant tout ça, la méthode plus rapide consiste peut-être
à en faire une bibliothèque dynamique plutôt que statique...

Heureusement pour toi que le binaire n'a pas été stripé.



;-)
Alain Ketterlin
Le #25469662
Olivier Miakinen
[...]
Non seulement j'ai la bibliothèque originale, mais j'ai même so n code
source complet et tout ce qu'il faut pour la recompiler. C'est juste
la flemme de devoir fouiller dans les fichiers source qui me faisait
me demander s'il existait une méthode plus rapide.

Cela dit, ayant tout ça, la méthode plus rapide consiste peut- être
à en faire une bibliothèque dynamique plutôt que statique. ..



Ce serait-il pas plus simple de reconstruire en "oubliant" la
bibliothèque en question pour l'édition de liens ? Le linker va
t'afficher une liste de ce qui manque...

-- Alain.
Erwan David
Le #25470222
Alain Ketterlin
Olivier Miakinen
[...]
Non seulement j'ai la bibliothèque originale, mais j'ai même son code
source complet et tout ce qu'il faut pour la recompiler. C'est juste
la flemme de devoir fouiller dans les fichiers source qui me faisait
me demander s'il existait une méthode plus rapide.

Cela dit, ayant tout ça, la méthode plus rapide consiste peut-être
à en faire une bibliothèque dynamique plutôt que statique...



Ce serait-il pas plus simple de reconstruire en "oubliant" la
bibliothèque en question pour l'édition de liens ? Le linker va
t'afficher une liste de ce qui manque...



Mais ce n'est pas bon : le linker ne va pas indiquer les macros qui
manquent par exemple.

Mieux vaut enlever les include correspondant à la lib et voir ce qui est
appelé et non défini.

--
Les simplifications c'est trop compliqué
Cyrille Lefevre
Le #25475052
Le 10/06/2013 13:25, Erwan David a écrit :
Alain Ketterlin
Olivier Miakinen
[...]
Non seulement j'ai la bibliothèque originale, mais j'ai même son code
source complet et tout ce qu'il faut pour la recompiler. C'est juste
la flemme de devoir fouiller dans les fichiers source qui me faisait
me demander s'il existait une méthode plus rapide.

Cela dit, ayant tout ça, la méthode plus rapide consiste peut-ê tre
à en faire une bibliothèque dynamique plutôt que statique...



Ce serait-il pas plus simple de reconstruire en "oubliant" la
bibliothèque en question pour l'édition de liens ? Le linker va
t'afficher une liste de ce qui manque...



Mais ce n'est pas bon : le linker ne va pas indiquer les macros qui
manquent par exemple.



Bonjoir,

ben si, puisque la macro ne sera pas résolu, elle passera pour un objet
inexistant et l'éditeur de lien l'identifiera comme manquant.

Mieux vaut enlever les include correspondant à la lib et voir ce qui est
appelé et non défini.



le plus simple est effectivement de repartir sur une base saine, c-a-d,
mettre de côté UCD-SNMP, de mettre NET-SNMP à la place, de relancer la
compil et de compter les points. de toutes les façons, il y aura
surement des adaptations à réaliser pour se mettre à niveau...

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Olivier Miakinen
Le #25475992
Le 12/06/2013 01:52, Cyrille Lefevre répondait à Erwan David (répondant
à Alain Ketterlin et à moi :

le plus simple est effectivement de repartir sur une base saine, c-a-d,
mettre de côté UCD-SNMP, de mettre NET-SNMP à la place, de relancer la
compil et de compter les points. de toutes les façons, il y aura
surement des adaptations à réaliser pour se mettre à niveau...



C'est ce que j'ai commencé à faire. Merci à tous pour les suggestions
et remarques !

Cordialement,
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme