J'ai un fichier DLL et je veux l'exécuter sous Windows. J'ai obtenu cette DLL à partir d'un site Challenge qui allègue que la DLL doit être exécutée indépendamment.
Pour exécuter les fonctions dans une DLL, commencez par rechercher leur fonction en utilisant un programme d'analyse PE ( Portable Executable ) (par exemple, Dependency Walker ) . Utilisez ensuite RUNDLL32.EXE . avec cette syntaxe :
RUNDLL32.EXE <dllname>,<entrypoint> <optional arguments>
nomdll est le chemin d'accès et le nom de votre fichier dll, entrypoint est le nom de la fonction et les arguments facultatifs sont les arguments de la fonction
Vous pouvez exécuter une fonction définie dans un fichier DLL en utilisant la commande rundll . Vous pouvez explorer les fonctions disponibles à l’aide de Dependency Walker .
Tandis que beaucoup de personnes ont fait remarquer que vous ne pouvez pas exécuter directement les dll et devez utiliser rundll32.exe pour exécuter les fonctions exportées, voici une capture d'écran d'un fichier dll réel fonctionnant exactement comme un exécutable:
Bien que vous ne puissiez pas exécuter les fichiers dll directement, je suppose qu’il est possible de les exécuter à partir d’un autre processus à l’aide de la fonction CreateProcess de WinAPI:
https://msdn.Microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx
Les fichiers .DLL ne sont pas exécutables dans le sens où les fichiers .EXE/.COM/.BAT sont exécutables, aussi je ne suis pas sûr de ce que vous voulez dire.
Vous pouvez utiliser l'application Dependency Walker fournie avec le SDK Windows pour interroger un fichier .DLL et voir quelles fonctions sont exportées par le fichier.
Il convient de mentionner que, puisqu'il est tout à fait possible d'exécuter des DLL comme tout autre exécutable, cela a longtemps été considéré comme un problème de sécurité. En tant que tel, il y a eu un certain nombre d'améliorations de la sécurité et de piratage du registre (ne plus avoir de liens de référence) qui empêche d'exécuter des DLL à partir de l'espace utilisateur normal sans privilèges supplémentaires.
Comme un bon exemple. Je me souviens avoir fait ces bidouilles, mais depuis je ne me souviens plus de ce que j'ai fait exactement. Je ne peux plus exécuter aucune DLL à partir d'environnement Shell d'utilisateur normal, même si le démarrage de diverses applications Win à partir de l'interface graphique fonctionne parfaitement.
Cela dit, il faut absolument lire " Sécurité de la bibliothèque de liens dynamiques " et " Meilleures pratiques pour prévenir le détournement de DLL ".
Pour exécuter un fichier .dll, commencez par rechercher les fonctions qu’il exporte. Les fichiers Dll exécuteront Les fonctions spécifiées dans la catégorie d’exportation..Pour savoir quelle fonction il exporte, reportez-vous à "filealyzer" Application. ..Il vous montrera la fonction d’exportation sous la catégorie "PE EXPORT" .. Notez le nom de la fonction - Ouvrez ensuite la commande Invite, tapez Rundll32 nomdll, nomfonction (Nomdll - nom de votre dll) (Functionname-- nom de la fonction trouvée dans l’exportation PE) Remarque: assurez-vous que l’emplacement de votre invite de commande est bien l’emplacement de votre fichier dll
Vous ne pouvez pas "exécuter" une DLL. Vous pouvez exécuter des fonctions dans la DLL, comme expliqué dans les autres réponses. Bien que les fichiers .EXE et les fichiers .DLL soient essentiellement identiques en termes de format, un .EXE se distingue par le fait qu’il contient un "point d’entrée" désigné pour effectuer ce que l’EXE a été créé. Les DLL ont en réalité quelque chose de similaire, mais le but du "dll principal" est juste d’effectuer l’initialisation et non de remplir le but principal du DLL; c’est-à-dire pour les (probablement) diverses autres fonctions qu’il contient.
Vous pouvez exécuter toutes les fonctions exportées par une DLL, en supposant que vous sachiez celle que vous voulez exécuter. Un EXE peut contenir un grand nombre de fonctions, mais une et une seule est spécialement conçue pour être exécutée simplement en "l'exécutant".