2008-10-15 7 views

Antwort

65

Sie können IDA Pro von Hex-Rays verwenden. Normalerweise werden Sie kein gutes C++ aus einer Binärdatei erhalten, wenn Sie nicht in Debugging-Informationen kompiliert haben. Bereiten Sie sich darauf vor, einen Los der manuellen Arbeit auszugeben, die den Code umkehrt.

Wenn Sie die Binärdateien nicht entfernt haben, gibt es einige Hoffnung, da IDA Pro C-ähnlichen Code produzieren kann, mit dem Sie arbeiten können. Normalerweise ist es jedoch sehr unruhig, zumindest wenn ich es vor ein paar Jahren benutzt habe.

+17

Um zu verdeutlichen, wird IDA nur die Demontage geben. Es gibt ein Add-On namens Hex-Rays, das den Rest des Weges in die C/C++ - Quelle dekompiliert, soweit dies möglich ist. – davenpcj

+1

Zu meinem Lesen der Dokumente gibt Hex-Strahlen nur C wie Pseudo-Code aus. Nicht, dass es für das Dekompilieren von C++ nutzlos ist, man muss nur ein wenig darüber wissen, wie Compiler C++ - Strukturen konvertieren. –

+0

Um zu klären, mehr, Disassembly ist das meiste, das Sie mit Hex-Rays dekompilieren können, übersetzt ASM zu C++ ASM kann in jede beliebige Programmiersprache mit Arbeit übersetzt werden, da alle Programme als ASM laufen können –

17

Ja, aber keiner von ihnen wird es schaffen, ausreichend lesbaren Code zu produzieren, um die Mühe wert zu sein. Sie werden mehr Zeit damit verbringen, die dekompilierte Quelle mit Assembler-Blöcken im Inneren zu lesen, als Ihre alte App von Grund auf neu zu schreiben.

18

Informationen werden im Kompilierungsvorgang verworfen. Selbst wenn ein Decompiler den logischen äquivalenten Code mit Klassen und allem erzeugen könnte (wahrscheinlich nicht), ist der selbst-dokumentierende Teil im optimierten Freigabe-Code verschwunden. Keine Variablennamen, keine Routinenamen, keine Klassennamen - nur Adressen.

+2

"die Seele" des Programms ist weg, nur eine leere Hülle von ihr ist früher selbst ... " –

3

Je nachdem, wie groß und wie gut geschrieben der ursprüngliche Code war, könnte es sich lohnen, wieder in Ihrer Lieblingssprache zu beginnen (was immer noch C++ ist) und aus Fehlern in der letzten Version zu lernen. Hat nicht jemand einmal gesagt, dass man einen wegwerfen soll?

n.b. Klar, wenn das ein riesiges Produkt ist, dann ist es vielleicht nicht die Zeit wert.

+0

http://www.joelonsoftware.com/articles/fog0000000069.html –

+21

Joel ist ein großer Kolumnist, aber manchmal falsch Und dann gibt es Zeiten, wenn er falsch zitiert wird. Wie hier, da die Frage dreht sich um den Verlust von Quellcode. Joels Artikel erklärt, warum Quellcode ist wertvoll. – MSalters

+4

* Hat nicht jemand einmal sagen, dass man einen wegwerfen? * Ja, und er änderte seine Meinung http://www.davewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away * [I] n 1975, riet ich Programmierern, "die erste Version zu werfen weg, "dann einen zweiten bauen. Bei der 20-Jahr-Jubiläumsausgabe erkannte ich, dass konstante inkrementelle Iteration ist ein viel solider Ansatz * –

5

Ich habe keine Dekompiler gesehen, die C++ - Code generieren. Ich habe ein paar experimentelle gesehen, die einen vernünftigen Versuch machen, C-Code zu erzeugen, aber sie neigten dazu, abhängig zu sein von den Code-Erzeugungsmustern eines bestimmten Compilers (die sich vielleicht geändert haben, es ist eine Weile her, seit ich mich das zuletzt angesehen habe)). Natürlich wird jegliche symbolische Information weg sein. Google für "Dekompiler".