[C++] Accéder à l'interface d'une Dll

Accéder à l'interface d'une Dll [C++] - C++ - Programmation

Marsh Posté le 25-06-2003 à 17:40:50    

Salut,
 
j'aurais voulu savoir si il existait des utilitaires ou un moyen de voir les interfaces (membres et fonctions externes) des fichiers dll compilés par exemple avec VC++
 
Merci.

Reply

Marsh Posté le 25-06-2003 à 17:40:50   

Reply

Marsh Posté le 25-06-2003 à 19:44:34    

Il y a Depends.exe fourni avec Visual Studio.
Tu dois l'avoir avec VC++ 6.

Reply

Marsh Posté le 25-06-2003 à 22:29:25    

Il me semble qu'une dll n'exporte que des fonctions
Sinon, tu prends n'importe quel désassembleur ca te donne le nom des fonctions. Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter. ( a la rigueur si on connait le compilo et qu'on a utilisé des noms décorés... )

Reply

Marsh Posté le 26-06-2003 à 08:27:31    

HuSt : Merci, c'est exactemen ce que je cherchais!
 
Ace17 : Je n'ai jamais utilisé de désassembleur, mais je peux facilement imaginer l'intéret ! Par contre, je pensais pas que ca puisse me donner un moyen "facile" d'accéder à ma Dll)

Reply

Marsh Posté le 26-06-2003 à 08:31:21    

L'intéret est pas si évident que ca. Un programme en assembleur un peu conséquent c'est déja pas facile a lire, mais le code généré par un désassembleur est carrément illisible car tous les identificateurs ont disparu, je te laisse imaginer le calvaire sur plusieurs dizaines de milliers de lignes de code... Disons que le désassembleur car peut servir si tu t'intéresses a un point précis du programme, ou si tu sais exactement ou chercher.

Reply

Marsh Posté le 26-06-2003 à 08:40:04    

D'accord, c'est ce que je pensais, ca doit etre la jungle ;)
 
Merci pour tes réponses ;)
 
Le programme cité au dessus livré avec Visual Studio fait tres bien l'affaire, et il te montre de quelles Dll la tienne est dépendante !

Reply

Marsh Posté le 26-06-2003 à 10:26:37    

Citation :

Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter


 
Avec la décorations des noms.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-06-2003 à 15:31:23    

HelloWorld a écrit :

Citation :

Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter


 
Avec la décorations des noms.


 
Voir plus haut  
" a la rigueur si on connait le compilo et qu'on a utilisé des noms décorés... "
 
 :D

Reply

Marsh Posté le 26-06-2003 à 17:13:08    

En fait c'est pas lié au compilo mais au langage (=> classes C++). Il me semble que c'est plus ou moins normalisé.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-06-2003 à 17:56:27    

Les noms décorés, c'est ce que l'on met dans le fichier def?

Reply

Marsh Posté le 26-06-2003 à 17:56:27   

Reply

Marsh Posté le 26-06-2003 à 17:57:18    

Yoyo@ a écrit :

Les noms décorés, c'est ce que l'on met dans le fichier def?


 
C'est les machins genre  
 
void tafonction@u455?545454
 

Reply

Marsh Posté le 26-06-2003 à 18:41:24    

HelloWorld a écrit :

En fait c'est pas lié au compilo mais au langage (=> classes C++). Il me semble que c'est plus ou moins normalisé.


 
Ouais je crois que quand on veut remonter aux parametres ca passe mais quand on linke deux .obj provenant de deux compilos différents il y a des fois ou ils ne se comprennent pas...

Reply

Marsh Posté le 26-06-2003 à 21:32:40    

Les amis, j'ai une question...
 
Est il possible, lors de l'appel d'un dll, de la debugger?
 
En fait, je cherche à connaitre par un moyen ou par un autre la valeur des variable dans le corps des fonctions de la Dll lorsque celle ci est exécutée...
 
Les cout et autres ne semblent pas marcher (aucun effet visible)

Reply

Marsh Posté le 26-06-2003 à 21:40:08    

Ben tu peux lui faire générer un fichier de log, tout simplement. Ou alors a grand coups de MessageBox, c'est une autre technique.

Reply

Marsh Posté le 26-06-2003 à 21:41:25    

HelloWorld a écrit :

Citation :

Par contre ca te donnera pas la liste des parametres, je ne vois d'ailleurs pas comment il serait possible d'y remonter


 
Avec la décorations des noms.


 
Maintenant que j'y pense, j'ai jamais vu de noms décorés dans une DLL. Ca existe?

Reply

Marsh Posté le 26-06-2003 à 21:59:58    

Ace17 a écrit :

Ben tu peux lui faire générer un fichier de log, tout simplement. Ou alors a grand coups de MessageBox, c'est une autre technique.


 
Euh, pour le MessageBox, ca me semble rapé car je fais une Win32 DLL (donc, pas de MFC présente a priori???)
 
Et pour générer le log, je dois faire comment? utiliser les macros TRACE0?
 

Reply

Marsh Posté le 26-06-2003 à 22:00:45    

Ace17 a écrit :


 
Maintenant que j'y pense, j'ai jamais vu de noms décorés dans une DLL. Ca existe?


 
A priori, ca a l'air d'exister :
 
http://www.laboratoire-microsoft.o [...] dev/dll/4/

Reply

Marsh Posté le 27-06-2003 à 09:31:53    

Ben il me semble que dès que tu as une classe dans ta dll, ça te génère des noms décorés.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 27-06-2003 à 09:32:43    

HelloWorld a écrit :

Ben il me semble que dès que tu as une classe dans ta dll, ça te génère des noms décorés.


 
Bah un compilo CPP va decorer n'importe quelle fonction sauf celle en extern "C"

Reply

Marsh Posté le 27-06-2003 à 10:29:43    

Yoyo@ a écrit :

Est il possible, lors de l'appel d'un dll, de la debugger?


 
Si c'est simple, tu peut tout simplement créer une application qui va lancer ta DLL et éxecuter les fonctions que tu souhaite tester. Tu n'as plus alors qu'à débugger l'application.
Sinon, tu peut comme indiqué plus haut écrire dans un fichier de log, faire des Message Boxes (en utilisant l'API Windows standard, pas besoin d'utiliser les MFCs), ou encore utiliser la fonction OutputDebugString.
Enfin, tu peut faire un appel à la fonction DebugBreak qui va te stopper ton programme et te proposer de le débugger.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-06-2003 à 10:30:31    

gatorette a écrit :


 
Si c'est simple, tu peut tout simplement créer une application qui va lancer ta DLL et éxecuter les fonctions que tu souhaite tester. Tu n'as plus alors qu'à débugger l'application.
Sinon, tu peut comme indiqué plus haut écrire dans un fichier de log, faire des Message Boxes (en utilisant l'API Windows standard, pas besoin d'utiliser les MFCs), ou encore utiliser la fonction OutputDebugString.
Enfin, tu peut faire un appel à la fonction DebugBreak qui va te stopper ton programme et te proposer de le débugger.


 
debutant :O
 

Code :
  1. _asm
  2. {
  3. int 3
  4. }


 
pour ceux qui en ont dans le slip :O [:ddr555]

Reply

Marsh Posté le 27-06-2003 à 10:41:26    

gatorette a écrit :


 
Si c'est simple, tu peut tout simplement créer une application qui va lancer ta DLL et éxecuter les fonctions que tu souhaite tester. Tu n'as plus alors qu'à débugger l'application.
Sinon, tu peut comme indiqué plus haut écrire dans un fichier de log, faire des Message Boxes (en utilisant l'API Windows standard, pas besoin d'utiliser les MFCs), ou encore utiliser la fonction OutputDebugString.
Enfin, tu peut faire un appel à la fonction DebugBreak qui va te stopper ton programme et te proposer de le débugger.


 
Ah oui, exact, j'avais oublié cette fonction OutputDebugString! Elle me générera des messages que je devrai récupérer avec un programe externe !
 
Merci ;)
 
PS : par curiosité, quand tu parles des MessageBox Windows qui ne font pas partie de la MFC, tu parles des fonctions s'appelant MessageBox?

Reply

Marsh Posté le 27-06-2003 à 10:59:20    

Yoyo@ a écrit :

PS : par curiosité, quand tu parles des MessageBox Windows qui ne font pas partie de la MFC, tu parles des fonctions s'appelant MessageBox?


 
Oui... c'est une fonction de l'API Windows. C'était en réponse à : "Euh, pour le MessageBox, ca me semble rapé car je fais une Win32 DLL (donc, pas de MFC présente a priori???)".


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-06-2003 à 11:36:30    

gatorette a écrit :


 
Oui... c'est une fonction de l'API Windows. C'était en réponse à : "Euh, pour le MessageBox, ca me semble rapé car je fais une Win32 DLL (donc, pas de MFC présente a priori???)".


 
Oui, oui, c'est pour ca que je posais la question !  
 
Bon, bah c'est parfait ca ! Avec des petits char[] ou char*, ca va bien le faire ;) Merci !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed