API Win32 pour énumérer dll fonctions d'exportation?
J'ai trouvé des questions similaires, mais pas de réponse à ce que je recherche. Voilà:
Pour un natif Win32 dll, est-il une API Win32 pour énumérer ses fonction d'exportation des noms?
Vous devez vous connecter pour publier un commentaire.
dumpbin /exports
est à peu près ce que vous voulez, mais c'est un outil de développement, pas une API Win32.LoadLibraryEx
avecDONT_RESOLVE_DLL_REFERENCES
est fortement mis en garde contre l', mais il arrive à être utile dans ce cas particulier, il effectue le gros du travail de cartographie de la DLL en mémoire (mais vous n'avez pas vraiment besoin ou envie d'utiliser quoi que ce soit à partir de la bibliothèque), ce qui en fait trivial pour vous de lire l'en-tête: le module de poignée renvoyée parLoadLibraryEx
points à droite à elle.Totalement non testé, mais je pense que c'est plus ou moins correct. (Les fameux derniers mots.)
DONT_RESOLVE_DLL_REFERENCES
drapeau peut-coup de la merde jusqu', car aucunDllMain
est appelée pour le module chargé.DONT_RESOLVE_DLL_REFERENCES
est nécessaire que l'adresse virtuelle dans les exportations du dictionnaire n'est pas valide quand mappés en mémoire. LoadLibrary apparemment fait de la nécessaire transformation. Au moins, je le vois sur mon Win10 x64.Passer à Microsoft research et de saisir les Détours de la Bibliothèque. Un de ses exemples est exactement ce que vous demandez. L'ensemble de la bibliothèque, essentiellement, fait le détour/reroutage win32 appels de fonction extrêmement facile. Ses trucs sympas.
Détours
Edit: notez Également que si vous voulez juste regarder la table d'exportation, vous pouvez (au moins dans visual studio), définir votre projet de propriétés à imprimer exporter/importer des tables. Je ne me souviens pas exactement option mais devrait être facile pour google.
**Edit2:**L'option Propriétés du Projet->Linker->Débogage->Générer MapFile ->Oui(/CARTE)
Tout ephemient est exact que
LoadLibraryEx
avecDONT_RESOLVE_DLL_REFERENCES
pouvez simplifier cette tâche beaucoup, vous pouvez la rendre encore plus simple que ce qu'il montre. Au lieu de trouver et l'énumération de la DLL du répertoire d'exportation, vous-même, vous pouvez utiliserSymEnumerateSymbols
à la liste des symboles pour vous.Bien que légèrement plus simple que son code (sans l'affirme, de son seulement une demi-douzaine de lignes de code) présente au moins théoriquement donne un peu plus de souplesse dans le cas de Microsoft devrait un jour décider de changer le format de fichier exécutable un peu, et/ou modifier exactement ce que le HMODULE points, de sorte que sa ne fonctionne plus (depuis la plupart de ces détails ne sont pas officiellement documentés de toute façon).
essayez ceci:
exemple:
de sortie:
Si vous ne voulez pas aller à la peine d'écrire votre propre code et préfère utiliser une DLL qui existe déjà pour ce but, je recommande PE Format de Fichier DLL. Est livré avec le code source, de sorte que vous pouvez modifier si vous le souhaitez. Pas de GPL à s'inquiéter.
Aussi disponible est une application graphique qui montre comment utiliser la DLL.
Si vous êtes simplement à la recherche d'un moyen de savoir quelles fonctions sont exportées dans une DLL, vous pouvez utiliser Microsoft dependency walker (depends.exe). Ce wont vous aider, si vous avez vraiment besoin de découvrir les exportations de la programmation, si.
J'ai peut-être tort, et je n'ai pas vérifié pour être honnête, mais je crois qu'il peut y avoir quelques problèmes de compatibilité avec l'aide de ephemient du code sur un module qui est construit sous une architecture différente de celle de votre processus. (Encore une fois, j'ai peut-être parler complètement hors de mon cul en ce moment)
Il y a un projet sur github, appelé dll2def qui utilise la même technique (bien qu'il charge le fichier en mémoire sur son propre), mais semble avoir mis en place des contrôles pour trouver les exportations en fonction de l'architecture de la binaire. Le code que vous seriez le plus susceptible d'être intéressé par est en ce fichier.