IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Biblioth�ques dynamiques: comment lister les symboles en c++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Sant�

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par d�faut Biblioth�ques dynamiques: comment lister les symboles en c++
    Bonjour tout le monde,

    Je cherche � trouver un moyen pour extraire l'ensemble des m�thodes pr�sentes dans une biblioth�que dynamique (C++) (.so ou .dll). Pour le moment, j'utilise des outils externes comme nm sous linux ou Dependency Walker pour les lister.

    J'aimerais pouvoir charger ces m�thodes de mani�re dynamique directement depuis un programme. Est-ce qu'il y a des biblioth�ques open source qui permettent �a?

    Je pensais � une interface de ce genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    //allMethods comprend les différentes méthodes avec leurs arguments associés
    std::vector<Methods> allMethods = listMethods("myBiblio.so"); //listMethods("myBiblio.dll");
    //allMethods[0].functionType() retournerait un std::function avec le bon paramètre de retour ainsi que les bons arguments
    allMethods[0].functionType() func1 = loadMethod<allMethods[0].functionType()>(allMethods[0].name());
    Il faudra bien s�r que je trouve une m�thode pour convertir un string en type (int, double, etc....) voir en classe. (c'est le principe de r�flexion non?)

    Merci pour tout.

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 505
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 505
    Par d�faut
    Ce que je vais affirmer ici n'est valable que pour les dll, je ne connais absolument pas les .so.

    Dans une dll "classique", il n'y aucune information autre que les noms d�cor�s avec un indice dans une table d'offset dans le code.
    https://msdn.microsoft.com/en-us/magazine/cc301808.aspx
    Pour avoir la liste des fonctions export�es, il faut donc juste lire la structure "IMAGE_EXPORT_DIRECTORY" dans la partie en-t�te d'un fichier au format PE.

    Si vous voulez acc�der aux autres informations (nombres de param�tres, types de param�tres, type de retour), il faut que vous ayez acc�s aux informations des debuggings, que chaque chaine de compilation traite et stocke de mani�re diff�rente (fichier pdb, section de donn�es en CodeView7).
    Les dll "imagehlp.dll" et "dbghelp.dll" permettent de lire ces informations sans tout interpr�ter � la main (en plus, c'est fonction du compilateur).


    Dependency Walker utilise le mangling de VS pour r�cup�rer la signature des m�thodes C++, �a ne marche donc qu'avec du code �crit en C++ compil� avec VS.

  3. #3
    Membre �clair�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Sant�

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par d�faut
    Merci pour cette r�ponse d�taill�e.

    Je voulais � la base ne fournir qu'une biblioth�que dynamique � mon application qui "interpr�terait" automatiquement l'ensemble des m�thodes fournies par le plugin.

    Au vu de la complexit� et surtout de la contrainte de devoir compiler les biblioth�ques (plugins) en debug pour avoir acc�s aux param�tres, je vais plut�t me tourner vers une m�thode qui listera les param�tres ainsi que les noms des fonctions associ�es (enfin, quelque chose dans le genre).

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Hello,

    peut-�tre que tu peux prendre le probl�me � l'envers et utiliser le scripting.
    Tu fournis une API en script (Python, LUA, ..) depuis ton appli, un moyen de faire comprendre � l'application que tel fichier c'est un script de plugin et qu'il doit appeler. Dans le script, l'utilisateur peut manoeuvrer l'appli avec ton API.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Membre �clair�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Sant�

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par d�faut
    Effectivement, je pourrais faire �a mais le but �tait plus d'�viter d'avoir un autre fichier en plus de la biblioth�que dynamique. En plus, je suis dans un domaine (m�dical) o� l'on ne souhaite surtout pas que l'utilisateur puisse faire des "bidouilles" et risque de cr�er un comportement inattendu.

  6. #6
    Expert �minent

    Femme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par d�faut
    Il suffit de ne pas lui donner acc�s � tout.
    Avec du scripting, tu ne donnes acc�s qu'� une partie des fonctions/variables.

    Ca peut �tre tr�s contr�l�.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 01/04/2005, 09h37
  2. [VB.NET] Comment lister les ordinateurs d'un r�seau
    Par Jan-t dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 18/03/2005, 08h44
  3. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et ant�rieur
    R�ponses: 8
    Dernier message: 18/01/2005, 18h17
  4. Comment lister les ex�cutables actifs ?
    Par Lung dans le forum API, COM et SDKs
    R�ponses: 7
    Dernier message: 15/04/2004, 13h03
  5. [VB6] Comment lister les serveurs SQL d'un domaine ?
    Par WOLO Laurent dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 29/01/2004, 08h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo