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 :

Connaitre les arguments d'une fonction d'une DLL


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut Connaitre les arguments d'une fonction d'une DLL
    Bonjour,
    J'ai à ma disposition une DLL contenant des fonctions dont je peux connaitre le nom via un petit soft DLLExportViewer

    Par exemple dans ma dll "prxl.dll", j'ai la fonction StoRes
    A l'aide de DLLExportViewer, je peux aussi obtenir l'info suivante:
    functionName = StoRes
    Address= 0x6093b7c0
    RelativeAdrres = 0x0003b7c0
    Ordinal = 13 (0xd)
    Filename = prxl.dll
    FullPath = c:\winntsystem32\prxl.dll
    Type= Exported Function


    Est ce qu'à partir de ces informations et d'un peu de code je sais retrouver
    * le nombre d'arguments d'entrée
    * le type des arguments d'entrées
    * le type de sortie
    ??

    Je ne poste rien d'autre comme info, pcq je sais absolument pas dans quelle direction me diriger...
    PS: je sais un tout petit peu coder (ce qui veut dire que suis pas un tueur en c++ => allez y mollo sur les explications :-)
    En vous remerciant d'avance

    David

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    ce type d'information est perdu à la compilation. Le nombre d'argument peut toutefois être obtenu à partir du fichier .lib, mais ce dernier ne donne pas les types des arguments, ni le type du retour de la fonction.

    Ces informations sont toujours données par le fichier d'en-tête (*.h) qui vient avec la DLL (et incidemment le .lib).

    Sans le fichier d'en-tête et le lib, il est possible de retrouver ces informations mais uniquement en "descendant" au niveau de l'assembleur. Mais même dans ce cas, rien ne garantie que l'on retrouve exactement la signature de la fonction telle qu'elle était dans le fichier d'en-tête.

  3. #3
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Je vous conseille Dependency Walker. Il y a même possibilité de "démangler" les conventions C++.
    Citation Envoyé par Dependency Walker FAQ
    Q. How do I view the parameter and return types of a function?
    A. For most functions, this information is simply not present in the module. The Windows' module file format only provides a single text string to identify each function. There is no structured way to list the number of parameters, the parameter types, or the return type. However, some languages do something called function "decoration" or "mangling", which is the process of encoding information into the text string. For example, a function like int Foo(int, int) encoded with simple decoration might be exported as _Foo@8. The 8 refers to the number of bytes used by the parameters. If C++ decoration is used, the function would be exported as ?Foo@@YGHHH@Z, which can be directly decoded back to the function's original prototype: int Foo(int, int). Dependency Walker supports C++ undecoration by using the Undecorate C++ Functions Command.
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 113
    Points : 53
    Points
    53
    Par défaut
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Réponses: 2
    Dernier message: 17/04/2007, 17h14
  3. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  4. Réponses: 3
    Dernier message: 16/01/2006, 16h02
  5. Réponses: 4
    Dernier message: 17/03/2004, 17h24

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