2009-03-09 9 views
1

J'ai une DLL à fonction unique qui exporte GetHash(). Cependant, le code source de cette DLL est perdu. J'ai besoin d'intégrer ce code dans mon projet MSVC++.Comment récupérer à partir du code source perdu?

Je sais qu'il existe des outils shareware pour cela, mais je pense que je peux le faire manuellement.

Que dois-je faire pour accomplir ceci manuellement?

+0

Concernant mon édition: Je pense que le changement de titre apportera un ensemble de réponses qui seront plus bénéfiques à long terme pour cet utilisateur. Cependant, je suis incertain sur le changement, car cela change le type de réponses susceptibles de se produire. –

+0

Je peux vous aider avec la décompilation manuelle si vous en avez toujours besoin. –

Répondre

2

Dans un projet que vous créez, référencez la DLL et appelez la fonction de hachage. Exécutez le code dans le débogueur et entrez et désassemblez la fonction et traduisez-la dans un langage de haut niveau.

Si cela ne suffit pas, désassemblez le code en une série de fonctions que vous pouvez implémenter avec les blocs ASM.

+0

merci, va l'essayer et revenir – Svetlana

1

Avez-vous un fichier LIB pour la DLL? Un fichier H (eader)? Les deux sont nécessaires pour relier statiquement, ce qui est le moyen le plus simple. Sinon, la route la plus facile est probablement simplement de la lier dynamiquement. (À moins que ce soit une DLL COM - avez-vous RegSvr32 il? Si oui, vous pouvez le référencer et l'appeler COM-style.) Pour ce faire, vous utilisez le LoadLibrary() et GetProcAddress() pour obtenir un pointeur de fonction. Et voici où les choses se compliquent: quelle convention d'appel la fonction utilise-t-elle, quels paramètres, et quel type de retour? Si vous en avez, vous pouvez définir un type de pointeur de fonction approprié (par exemple "int fphasher * (char *)"). Sinon, préparez-vous à beaucoup d'expérimentation amusante ou même à une liste de désassemblage ...

Une visionneuse de DLL comme DllExportViewer peut vous aider à obtenir le nom de la fonction et vous donner des indications sur la nécessité d'utiliser les conventions d'appel de style C ou C être utilisé. Avertissement: je n'ai pas testé cette version particulière.

1

Je pense qu'une autre avenue serait de désassembler la DLL et récupérer le code source d'origine. Vous pouvez ensuite intégrer le code dans votre base de code et mieux le gérer.

Ce serait probablement une solution à long terme à ce problème.

Questions connexes