Bonjour,
Comment faire pour visualiser les méthodes et propriétés de dll32.dll ou user32.dll ?
Merci
Bonjour,
Comment faire pour visualiser les méthodes et propriétés de dll32.dll ou user32.dll ?
Merci
Avec Depends http://www.dependencywalker.com/
salut bacelar,
Est-il possible de faire cette visualisation avec OleViewer.exe également ?
Si oui le quel est le meilleur entre OleViewer et Dependency Walker ?
Merci
Ça dépend pour quoi.
OLE Viewer, c'est bien pour les composants COM. Mais pour les DLLs normales, on utilise Dependency Walker. En fait, je dirais que OLE Viewer c'est pour les cas particuliers, donc tu dois commencer par DW.
... Et si DW te dit que la DLL en question est une DLL COM (elle exporte DllGetClassObject() et compagnie), alors tu peux utiliser OLE Viewer.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
ok Merci à vous !
Dernière question maintenant que je peux visualiser les fonctions des DLL comment faire pour savoir ce que fait exacement la fonction et surtout... quels paramètres attend cette fonction ?
Y a-t-il quelque chose de mieux que de chaque fois chercher sur
http://msdn.microsoft.com par exemple ?
Merci
Une dll nue (sans .lib, .h, .chm ou documentation) est inutilisable sans faire un lourd travail de reverse-engeneering.
Pour les dll COM, le format permet d'obtenir une documentation succinctes des classes et méthodes des composants exporté par la dll.
Quel est le but de vos pérégrination, à par vous compliqué la vie à ne pas utiliser une documentation qui vous est généreusement offerte ?
La doc, c'est celle de l'auteur. Dans le cas de Microsoft, c'est MSDN. Pour COM, soit il s'agit d'interfaces Microsoft, soit la doc est chez le créateur de la DLL ou du programme qui l'utilise.
Au passage, user32 possède un .lib, mais il est dans le Platform SDK (et il a été plus ou moins rippé pour créer le libuser32.a de MinGW).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
J'ai encore une question Est-il possible d'enregistrer une DLL normale (user32.dll) dans la registery comme une DLL COM (scrrun.dll) ?
1)Bon je sais que non... mais pourrais-je avoir une explication détaillée pour bien comprendre ?
2)Je demande cela parce que les dll COM ont l'aire facilement accessible par rapport aux dll "normales", quelle est la raison d'avoir des COM et les autres... ?)
Merci !
Une dll COM est une dll normal particulière comme un carré est un rectangle particulier.
Lors de l'enregistrement de la DLL COM, le système se sert de ces particularités pour ajouter à la registry les informations nécessaires à l'utilisation des composants COM dans d'autres programmes.
Ces particularités se résument, dans le cas de l'enregistrement, à une simple fonction exportée avec un non déterminé.
Mais cette fonction est en charge de remplir la registry avec des informations sur les composants COM embarqués dans la dll. Donc pas de composant COM, l'enregistrement ne servira à rien, même en cas de réussite.
La raisin d'être des composants COM est bien d'être "facilement" utilisable par un ensemble de logiciel conçus pour s'en servir, comme les logiciels d'Office, IE. Pour faire ce "miracle", les concepteurs de composants COM doivent suivre un ensemble de règles.
Il n'y a pas de miracle, si la dll ne contient pas de composants COM qui ont été conçus en suivant ses règles, il est impossible pour les programmes hôtes de se servir de cette dll.
Il est toujours possible d'utiliser un dll ayant un API en C si les programmes hôtes sont conçus pour pourvoir s'en servir. C'est une approche moins souple mais plus portable que des composants COM.
Merci bcp bacelar !
Maintenant je sais quand utiliser dependency walker et oleviw ^^ afin de visualiser les fonctions des DLL (qui était ma question de départ).
Je connais également les différence entre DLL COM et DLL "normale".
Maintenant j'ai 2 question sur ces programmes qui permettent de parcourir les DLLs.
Ole: Dans l'arborescence de base il y a "Objet COM" et "Type Library" par exemple. Qu'est ce que le second représente par rapport à un objet COM ?
(Ca à l'aire d'avoir les fonctions d'API connu tel que word etc... mais une explication claire m'aiderais à y voir claire)
DW: Lorsque je visualise user32.dll par exemple il y a une arborescence des 8 autres dll en dessous comme kernel32.dll ntdll.dll etc... est-ce que cela veut dire que ces 8 dernières dll sont dans user32 ? (D'après le fonctionnement d'un "tree" c'est ce qui devrait être juste... mais ca me semble faux et illogique).
Merci encore de me lire et de me répondre !
- La "type library" est un fichier décrivant les interfaces COM spécifiques exportées par les objets en question. Cela peut permettre, entre autres, de régénérer le fichier .h qui déclare lesdites interfaces, pour les utiliser en C++. Ellle permet aussi la génération automatique de proxy et stub quand on utilise l'objet COM en inter-processus (ou inter-thread, dans certains cas).
En fait, c'est une forme limitée d'introspection. À noter que la "type library" peut être aussi bien dans un fichier .tlb séparé que dans la DLL elle-même en tant que ressource.- Non, ça veut dire que user32.dll référence les DLLs en question (qu'elle utilise des fonctions de ces DLLs et a donc "besoin" de ces DLLs pour marcher). À noter que les dépendances croisées sont possibles; c'est une des raisons pour lesquelles ont ne doit pas appeler de fonction d'une autre DLL (hormis kernel32) dans DllMain() (on n'est pas censé appeler non plus des fonctions de la CRT, mais généralement il se trouve que ça marche, même si ce n'est pas garanti).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
hmm ok mais si les dll COM sont composées d'Objet n'est ce pas ? Pk ajouter des interfaces ?
Quelle est la différence entre une Interface, un Objet COM, un Objet OLE et une classe ?
Un object COM n'est jamais référencé directement en tant que tel, c'est ce qui fait la force du système.
Chaque classe COM implémente un certain nombre d'interfaces COM, et c'est uniquement par ces interfaces qu'on les appelle.
Pour moi, un object OLE est un objet d'une classe COM implémentant certaines interfaces spécifiques. Les contrôles ActiveX sont aussi des classes COM particulières.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
- C'est du VB ? Alors dans ce cas, ça ressemble à du late-binding: Utilisation de l'interface IDispatch.
- Tu parles des termes en IDL, là?
- coclass: Contient généralement juste le ProgID, CLSID et (pas toujours) la liste des interfaces que la classe en question implémente.
- interface: Une vraie interface au sens C/C++ du terme, utilisable en early-binding.
- dispinterface: Une interface "virtuelle" n'existant que pour le late-binding avec IDispatch. Indispensable pour les langages non-compilés.
- Interface duale: Les deux ensemble: Une interface C/C++ qui hérite de IDispatch au lieu de hériter directement de IUnknown.
- Si une classe COM n'a pas de coclass déclarée, la classe COM n'est pas instanciable via CoCreateInstance() : Généralement ça veut dire que d'autres fonctions l'instancie, comme une méthode d'une autre classe, ou une fonction isolée comme CreateStreamOnHGlobal(). Mais pourquoi me parles-tu de user32.dll? Cette DLL-ci ne contient aucune classe COM...
Ou bien, tu veux le cas général? Ben oui, dans ce cas on passe par un wrapper écrit dans un langage permettant d'accéder aux fonctions de ladite DLL.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
La registery sert donc de "passerelle" entre les programme et les DLL ?
et lorsque l'on fait :
On "questionne" la registery voir si il y aune entrée (key) contenant Scripting.FileSystemObject ayant les informations sur la DLL qui elle contient la classe/objet demandé, et cet classe/objet et composé de une ou plusieures interfaces contenant les méthodes/fonctions à utiliser lorsque notre objet est instancié. C'est bien ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set oFSO = CreateObject("Scripting.FileSystemObject")
Après il peut y avoir des trucs louches comme WORD qui je crois peut avoir une DLL .net ET/OU une "Type Library"COM (par exemple) qui elles 2 peuvent contenir la même classe/objet. Si ce n'est pas le même une classe/objet qui à le même nom des deux côtés... est-ce que je me trompe ?
Je dirais plus "annuaire" que "passerelle" ici.
Oui. Mais attention, ça se fait en deux étapes:et lorsque l'on fait :
On "questionne" la registery voir si il y aune entrée (key) contenant Scripting.FileSystemObject ayant les informations sur la DLL qui elle contient la classe/objet demandé, et cet classe/objet et composé de une ou plusieures interfaces contenant les méthodes/fonctions à utiliser lorsque notre objet est instancié. C'est bien ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set oFSO = CreateObject("Scripting.FileSystemObject")
On récupère d'abord un objet COM qui implémente l'interface IClassFactory (l'objet retourné par DllGetClassObject()), puis on appelle sa méthode CreateInstance() pour créer l'objet voulu. Et ça, c'est seulement le cas basique (DLL InprocServer32); c'est plus compliqué pour les composants out-of-process.
Attention, la Type Library ne contient pas vraiment de classe: Elle ne fait que décrire ses interfaces.Après il peut y avoir des trucs louches comme WORD qui je crois peut avoir une DLL .net ET/OU une "Type Library"COM (par exemple) qui elles 2 peuvent contenir la même classe/objet. Si ce n'est pas le même une classe/objet qui à le même nom des deux côtés... est-ce que je me trompe ?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
1) J'avais oublié il y a encore une entrée (key) pointant sur un .exe (WINWORD.EXE) c'est cela les composants out-of-process ?
2) Pour la Type Library je parle de "classe" car j'ai remarqué qu'elle ont toutes des "coclasse" qui elle on l'aire d'être ce qui est appelé par la registry et qui ont également l'aire de contenir toutes les interfaces énoncées dans la Type Library. faux ?
3) Sans ces coclasse il n'est pas possible d'instancier une interface non?
Merci
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager