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).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Tanguy Ortolo
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
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).
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).
P/S: je parle de ELF sous Linux, je ne sais pas pour les autres
Olivier Miakinen
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 !
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 !
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
Olivier Miakinen , dans le message <kot22c$2ecv$, 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 , dans le message <kot22c$2ecv$1@cabale.usenet-fr.net>,
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 , dans le message <kot22c$2ecv$, 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 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é.
;-)
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é.
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é.
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.
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.
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 10/06/2013 13:25, Erwan David a écrit :
Alain Ketterlin écrivait :
Olivier Miakinen <om+ writes:
[...]
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.
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%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
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 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
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 !
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 !