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

Windows Discussion :

retrouver l'interface d'une dll quelconque


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut retrouver l'interface d'une dll quelconque
    Salut,
    Existe t il un moyen pour retrouver l'interface pour utiliser une dll quelconque .
    Je ne sais pas dans quelle direction chercher.
    A+

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 778
    Points
    5 778
    Par défaut
    Qu'entend-tu par "une interface pour utiliser une dll" :

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Pour avoir les noms des fonctions exportées, c'est facile (ex. : avec dumpbin si tu as MSVS, mais plein d'autres outils le font).
    Pour avoir des infos sur les types des paramètres, c'est moins évident (leur taille, c'est plus simple).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    en fait je n'utilise pas d'outils MS

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par andrei
    en fait je n'utilise pas d'outils MS
    Ce n'est pas une raison pour ne pas répondre à la question "Qu'entend-tu par "une interface pour utiliser une dll : "...

    Parmi les outils qui peuvent aider quand (comme moi ) on utilise MinGW : dlltool, nm, pexports.
    En fait, lorsqu'on a une DLL sans les sources et qu'on veut l'utiliser dans un programme sans avoir à faire appel à LoadLibrary()/GetProcAddress() dans le programme, on doit créer une librairie ("libXXX.a" avec MinGW) qui permettra de lier l'exécutable produit avec la DLL.
    Dans le processus qui mène à la création d'une telle librairie, on est amené à exporter des symboles de la DLL et il y a des chances que cela t'intéresse.
    Quelques liens :
    http://wiki.tcl.tk/2435
    http://www.dcs.gla.ac.uk/~sof/Makefile-dll
    http://www.mingw.org/docs.shtml (voir al partie "How to create a def file for a dll")
    http://www.geocities.com/yongweiwu/stdcall.htm

    Essaye aussi de préciser ta question, de décrire ta situation, de donner des exemples... Sans précision, tu risques de ne pas avoit de réponse ou d'avoir des réponses qui ne te conviennent pas.
    Enfin, quand le problème est résolu : cliques sur :smile:

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    interface pour utiliser une dll

    Et bien, ma petite expérience en prog (je suis pas un gourou) m'a appris que l'on mettait les briques qui permettent de faire tourner l'appli.

    Dans la programmation objet je suppose donc que les dll contiennent donc les classes de l'appli.

    Je voudrais donc avoir les classes avec les methodes et propriétés qui vont avec.

    Avec ca je pourrais faire un wrapper pour python.

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par andrei
    Dans la programmation objet je suppose donc que les dll contiennent donc les classes de l'appli.
    Elles peuvent. Les classes peuvent très bien être dans l'exécutable et les DLLs (accompagnant la même application) être écrites en C et n'exporter que des fonctions (et pas des méthodes/classes).
    Ce qui peut aider (si on en connaît le format et si ils existent) : les fichiers ".tlb" (Type Library) correspondants à la DLL.

    Citation Envoyé par andrei
    Je voudrais donc avoir les classes avec les methodes et propriétés qui vont avec.

    Avec ca je pourrais faire un wrapper pour python.
    Tu as essayé les outils cités dans mon précédent message ? Qu'est-ce qu'ils donnent (poste le résultat ou un extrait, ne te contente pas de répondre "pas grand chose") ?

    Tu devrais pouvoir mieux comprendre le résultat après avoir lu Name mangling.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Salut,

    comme tu l'avais indiqué dans ton premier message :
    Pour avoir les noms des fonctions exportées, c'est facile (ex. : avec dumpbin si tu as MSVS, mais plein d'autres outils le font).
    Pour avoir des infos sur les types des paramètres, c'est moins évident (leur taille, c'est plus simple).
    J'ai obtenu facilement le nom de toutes les methodes exportées grace à pexports.

    par contre je n'ai pas d'indices sur leurs parametres

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Personne n'a cité dependency walker ?
    http://www.dependencywalker.com/

    Citation Envoyé par andrei
    J'ai obtenu facilement le nom de toutes les methodes exportées grace à pexports.

    par contre je n'ai pas d'indices sur leurs parametres
    parce que c'était des fonctions C. Le nom des fonctions C++ est encodé (name mangling, voir réponse de David.Schris). Le name mangling est spécifique à chaque compilo C++. Ta classe n'est pas exportée, ce sont ses fonctions membres / opérateurs etc... qui le sont. Les fonctions virtuelles ne sont pas vraiment exportées, seule la vtable l'est. Donc si y'a des fonctions virtuelles oublie ton wrapper dynamique.
    Regarde plutôt du côté de SWIG, qui va à partir d'un fichier de définition d'interface générer le wrapper python / C++. Tu obtiens une dll avec une seule fonction exportée qui renvoie un PyObject que l'interpréteur Python comprend. Ce PyObject est généré par SWIG et décrit la classe C++ (car y'a des choses plus complexes comme la durée de vie et la conversion des types python <-> C++ à effectuer).

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Salut,
    Dans ce que j'ai lu de SWIG, il faut le source de la dll.

    La dll que je voudrais wrapper n'est pas en C/C++ mais c'est une dll de windev.

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Le problème c'est que c'est bien plus complexe qu'un simple nom de fonction, sauf peut être si la fonction ne reçoit / renvoie rien. Il faut convertir les types, et passer d'un monde à l'autre.
    Bref à toi de voir, si tu connais bien le sujet. Sinon faudrait peut être faire un wrapper C/C++ de ta dll windev qui va servir à créer un wrapper SWIG

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Bref à toi de voir, si tu connais bien le sujet.
    J'approuve (si tant est que je puisse). C'est pas "bénin" comme projet mine de rien.
    Citation Envoyé par Aurelien.Regat-Barrel
    Sinon faudrait peut être faire un wrapper C/C++ de ta dll windev
    Mouais...sauf que pour ça ausi il faut avoir le détail de ce que contient la DLL, non ? Enfin moi je dis ça...

  13. #13
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Dans tous les cas faut avoir une petite idée de comment utiliser la dll

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Dans tous les cas faut avoir une petite idée de comment utiliser la dll
    Et de ce qu'elle fait. Hum...ok, je

    Si elle n'est pas trop "énorme" (surtout en nombre d'exports) et si tu as une appli. pas trop complexe qui l'utilise, tracer les appels de l'appli. à la DLL peut parfois donner des indices (en plus de ceux éventuellement fournis par les noms des exports).

    D'autres indices peuvent être obtenus quand on peut mettre la main sur une version "debug" de la DLL (plein de symboles à lire). C'est parfois le cas avec les versions beta distribuées par certains.

    C'étaient les idées du jour...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Ca va pas etre facile, je ne sais plus si ce que je faire est vraiment réalisable finalement.

    La dll n'exporte pas énormément de fonctions. Mais je ne sais pas comment elle fonctionne exactement. C'est la dll qui s'occupe des bases de données hyperfile.
    Il n'existe pas de ports vers d'autres plateformes que windev.

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Et la structure des fichiers (.FIC, .NDX, etc) est-elle complexe ?

  17. #17
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 754
    Points : 10 719
    Points
    10 719
    Billets dans le blog
    3
    Par défaut
    Ah ouai... déjà y'a un problème de licence je pense. Je suis pas sûr que tu ais le droit de faire ça.

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel
    Ah ouai... déjà y'a un problème de licence je pense. Je suis pas sûr que tu ais le droit de faire ça.
    Citation Envoyé par http://www.april.org/dossiers/dvd-cca/reverse-engineering.html
    Le reverse engineering est légal !
    Beaucoup d'éditeurs et de constructeurs essayent de limiter l'utilisation du reverse engineering sur leurs produits de peur qu'on ne leur vole des « secrets de fabrication ». Certains, comme c'est le cas avec la DVD-CCA utilisent même des pressions légales pour arriver à leurs fins.

    Et pourtant, le reverse engineering est une technique tolérée dans de nombreux pays. Ne nous méprennons pas, l'autorisation du reverse engineering est avant tout motivée par son importance économique, le reverse engineering permettant la migration de techniques informatiques d'un système à un autre.

    L'utilisation du reverse engineering est toléré en Europe dans le cas du fair-use, qui l'autorise lorsque l'utilisation des connaissances acquises répond à des besoins d'implémentation d'interfaces ou de correction d'erreurs (débogage).

    À terme, le reverse engineering sur un programme permet la création d'un programme voisin, similaire aux programmes écrits par le fabriquant de la technologie analysée, mais qui repose sur des bases complêtement distinctes. Les accusations du viol de secrets industriels ou de propriété industrielle sont donc infondés.
    "implémentation d'interfaces"...c'est un peu ce que veut faire notre ami andrei, non ?

    Si c'était illégal est-ce que les développeurs de Samba (clique ici pour voir), d'OpenOffice.org (pense aux filtres d'import/export), de plusieurs pilotes sous Linux/*BSD/autres, etc(, etc, etc) ne devraient pas avoir des problèmes ?

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    attention, le reverse engineering, légal ou non, devient illégal de toute façon s'il est interdit dans le contrat de license... (violation du contrat)

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Médinoc
    attention, le reverse engineering, légal ou non, devient illégal de toute façon s'il est interdit dans le contrat de license... (violation du contrat)
    Un contrat de licence ne peut pas avoir plus de valeur que la loi.
    Et la loi dit :
    Citation Envoyé par Code de la Propriété Intellectuelle, Article L122-6-1
    IV. La reproduction du code du logiciel ou la traduction de la forme de ce code n'est pas soumise à l'autorisation de l'auteur lorsque la reproduction ou la traduction au sens du 1º ou du 2º de l'article L. 122-6 est indispensable pour obtenir les informations nécessaires à l'interopérabilité d'un logiciel créé de façon indépendante avec d'autres logiciels, sous réserve que soient réunies les conditions suivantes :
    1º Ces actes sont accomplis par la personne ayant le droit d'utiliser un exemplaire du logiciel ou pour son compte par une personne habilitée à cette fin ;
    2º Les informations nécessaires à l'interopérabilité n'ont pas déjà été rendues facilement et rapidement accessibles aux personnes mentionnées au 1º ci-dessus ;
    3º Et ces actes sont limités aux parties du logiciel d'origine nécessaires à cette interopérabilité.
    Les informations ainsi obtenues ne peuvent être :
    1º Ni utilisées à des fins autres que la réalisation de l'interopérabilité du logiciel créé de façon indépendante ;
    2º Ni communiquées à des tiers sauf si cela est nécessaire à l'interopérabilité du logiciel créé de façon indépendante ;
    3º Ni utilisées pour la mise au point, la production ou la commercialisation d'un logiciel dont l'expression est substantiellement similaire ou pour tout autre acte portant atteinte au droit d'auteur.
    Tu peux aussi le lire .

Discussions similaires

  1. Implémentation d'interface depuis une dll
    Par nikus_knx dans le forum C#
    Réponses: 5
    Dernier message: 10/12/2009, 13h01
  2. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 11h42
  3. TForm dans une DLL avec utilisation d'Interface
    Par guedelmalin dans le forum Langage
    Réponses: 13
    Dernier message: 17/06/2005, 12h58
  4. [C#] Extraire l'interface d'une dll
    Par Thalion dans le forum Windows Forms
    Réponses: 4
    Dernier message: 07/10/2004, 09h01

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