Est-il possible de trouver toutes les fonctions exposées par une dll
J'ai été la recherche d'un moyen d'obtenir toutes les chaînes de la carte pour les noms de fonction dans une dll.
Je veux dire par là, toutes les chaînes pour lesquelles vous pouvez appeler GetProcAddress. Si vous faites un dump d'une dll les symboles (les chaînes) sont là, mais je n'y figure doit-moi un appel système pour acquérir ces noms.
- juste un pinaille, mais je pense que vous vouliez dire > mais je me figure il doit y avoir un appel système
- Si vous êtes à la recherche d'un moyen de le faire programmaticly, voir ma réponse plus bas.
- Aussi garder à l'esprit que les Dll pouvez exporter des fonctions qui n'ont pas de noms de chaîne, et doit être accessible via leur ordinale.
- Les données peuvent également être exportées par ordinale. Dans les deux cas, cependant, il est encore possible d'utiliser
GetProcAddress (...)
à l'aide d'un nom. Vous avez juste à utiliser le pseudo-nomMAKEINTRESOURCEA (<ordinal>)
vous donne; vous n'allez jamais à trouver ce nom par la marche de la table d'exportation de l'image exécutable, maisGetProcAddress
sait très bien quoi faire avec elle 😉
Vous devez vous connecter pour publier un commentaire.
Il faut un peu de travail, mais vous pouvez le faire programmaticly à l'aide de la DbgHelp bibliothèque de Microsoft.
Le débogage d'Applications pour Microsoft .Net et Microsoft Windows, par John Robbins est un excellent (même si un peu plus), livre qui contient des détails sur l'utilisation et la totalité du code source. Et, vous pouvez le ramasser sur Amazon pour le prix!
Si vous avez MS Visual Studio, il est un outil de ligne de commande appelé DUMPBIN.
Il existe trois types distincts de Dll sous Windows:
Classique Dll qui exposent chaque fonction disponible dans les exportations de la table de la DLL. Vous pouvez utiliser dumpbin.exe ou depends.exe à partir de Visual Studio, ou la libre dependency walker à l'examen de ces types. Matt Pietrek a écrit de nombreux articles et des utilitaires pour creuser dans Win32 fichiers PE. Jetez un oeil à son classique MSDN Magazine articles. C++ Dll qui contiennent des classes exportées seront à l'exportation de chaque méthode dans la classe. Malheureusement, il exporte les noms déformés, de sorte que la sortie de dumpbin est pratiquement illisible. Vous aurez besoin d'utiliser un programme comme vc++_filt.exe pour demangle la sortie.
COM Dll qui exposent des objets COM. Ces Dll exposer une poignée de régulier des fonctions exportées (DllRegisterServer etc) qui permettent au système de COM pour instancier des objets. Il existe de nombreux utilitaires qui peuvent regarder ces Dll, mais à moins qu'ils ont intégré de bibliothèques de types, ils peuvent être très difficiles à examiner.
4Developers ont un certain nombre de bonnes COM/ActiveX outils.NET Dll qui contiennent .NET assemblées. Typiically vous pouvez utiliser un outil comme .NET Réflecteur à plonger dans ces.
Edit: 4Developers lien ne fonctionne pas.
Aussi, il y a de la Dépend du programme à http://www.dependencywalker.com/
Essayez ceci (Linux) code C:
Il suit les références à l'intérieur le fichier PE, et enfin appelle une fonction de rappel d'export pour chaque symbole. Pour un aperçu de la PE format de fichier voir ceci: http://www.openrce.org/reference_library/files/reference/PE%20Format.pdf
Je ne sais pas d'une API WIn32 pour le faire: au lieu de cela, vous (ou l'un des outils mentionnés dans d'autres posts) le faire en connaissant le format binaire d'un fichier PE, et de la lecture du fichier: voir http://msdn.microsoft.com/en-us/magazine/cc301808.aspx (et que l'article mentionné une "PEDUMP" utilitaire).
- Je utiliser dumpbinGUI, qui vous donne la liste des exportations (et beaucoup plus) à partir d'un clic droit dans l'Explorateur Windows.
dumpbin
etdepends
permettra à la fois de vous donner les listes ainsi.Vous devez inspecter l'en-tête PE de la .dll, puisque c'est finalement ce que Windows ne fait de toute façon.
En supposant que vous avez un pointeur vers l' .dll
IMAGE_OPTIONAL_HEADER
(vous pouvez utiliser dbghelp deImageNtHeader
fonction avec une poignée pour une .dll chargées parLoadLibrary
ou de tenter de trouver vous-même si vous connaissez la disposition de la .dll vous-même), vous aurez envie de chercher àoptional_header->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
, trouver la table d'exportation par rapport à l'en-tête facultatif avec le décalage en y, puis marcher à l'exportation de la table (c'est unIMAGE_EXPORT_DIRECTORY
).Pour funsies, un rétro-compatible PE image commence avec une
IMAGE_DOS_HEADER
; le décalage de laIMAGE_NT_HEADER
estIMAGE_DOS_HEADER::e_lfanew
, et laIMAGE_OPTIONAL_HEADER
est incorporé dans le NT en-tête.il y a un programme appelé dll export viewer, vous pouvez utiliser: http://www.nirsoft.net/utils/dll_export_viewer.html
J'ai toujours l'avoir à le faire. Je viens d'aller à un de ces sites. Ils hébergent les informations que nous avons l'habitude de besoin.
Windows 7 Fichier DLL Informations
Windows XP Fichier DLL Informations
Vous pouvez également utiliser la fonction "objdump" linux outil sous windows, mais vous pouvez avoir à installer cygwin premier.
- Je utiliser les commandes suivantes:
Je suppose que vous finirez par l'analyse du fichier PE et ne demangling vous-même si vous souhaitez trouver le nom d'un inconnu dll dans le moteur d'exécution ou extrêmement inutiles du système("dumpbin"); la magie.
Vous devriez être plus clair sur ce que vous voulez.
BFD bibliothèque fait ce que vous voulez (et l'évier de la cuisine) qui est le principal composant de plusieurs GNU binutils outils. Je ne peux pas être sûr si elle va s'adapter à votre problème.
Vous n'avez besoin d'aucun outil et vous n'avez pas besoin d'analyser PE.
Juste une utilisation standard de l'api Win32 (D)
Le code (en C) a été publié à de nombreuses reprises sur Inter. Win32 api ng (
news://comp.os.ms-windows.programmeur.win32) (depuis 1992...)