2009-03-09 10 views
1

Ich habe eine Ein-Funktions-DLL, die GetHash() exportiert. Der Quellcode für diese DLL ist jedoch verloren. Ich muss diesen Code in mein MSVC++ Projekt integrieren.Wie kann ich den verlorenen Quellcode wiederherstellen?

Ich weiß, dass es einige Shareware-Tools dafür gibt, aber ich denke, dass ich es manuell machen kann.

Was muss ich tun, um dies manuell zu erreichen?

+0

In Bezug auf meine Bearbeitung: Ich denke, die Titeländerung zu diesem bringt eine Reihe von Antworten, die auf lange Sicht für diesen Benutzer vorteilhafter sein wird. Ich bin jedoch zweifelhaft auf die Änderung, da es die Art der Antworten ändert, die wahrscheinlich kommen werden. –

+0

Ich kann mit der manuellen Dekompilierung helfen, wenn Sie es noch brauchen. –

Antwort

2

In einem Projekt, das Sie erstellen, verweisen Sie auf die DLL und rufen Sie die Hash-Funktion auf. Führen Sie den Code im Debugger aus, fügen Sie die Funktion ein und aus, und übersetzen Sie sie erneut in eine Hochsprache.

Wenn dies nicht gut genug ist, zerlegen Sie den Code in eine Reihe von Funktionen, die Sie mit ASM-Bausteinen implementieren können.

+0

danke, werde es versuchen und zurückkehren – Svetlana

1

Haben Sie eine LIB-Datei für die DLL? Eine H (eader) -Datei? Beide werden benötigt, um statisch zu verbinden, was der einfachste Weg ist.

Ansonsten ist die einfachste Route wahrscheinlich, sie nur dynamisch zu verknüpfen. (Wenn es sich hierbei nicht um eine COM-DLL handelt - müssen Sie RegSvr32 verwenden? Wenn ja, können Sie darauf verweisen und es als COM-Stil bezeichnen.) Um dies zu tun, verwenden Sie die LoadLibrary() und GetProcAddress() Funktionszeiger. Und hier wird es knifflig: Welche Aufrufkonvention verwendet die Funktion, welche Parameter und welchen Rückgabetyp? Wenn Sie diese haben, können Sie einen geeigneten Funktionszeigertyp definieren (z. B. "int fphasher * (char *)"). Ansonsten, bereiten Sie sich auf eine Menge amüsanter Experimentier- oder sogar Disassemblierungslisten vor, um die Dinge in Ordnung zu bringen ...

Ein DLL-Viewer wie DllExportViewer kann helfen, den Funktionsnamen richtig zu bekommen, und einige Hinweise bekommen, ob C++ - oder C-Style-Aufrufkonventionen sollten verwendet werden. Vorbehalt: Ich habe diese spezielle Version nicht getestet.

1

Ich denke, eine andere Möglichkeit wäre, die DLL zu zerlegen und den ursprünglichen Quellcode wiederherzustellen. Sie sind dann in der Lage, den Code in Ihre Codebasis zu integrieren und besser zu verwalten.

Dies wäre wahrscheinlich eine längerfristige Lösung für dieses Problem.

Verwandte Themen