Ich habe ein Programm, in dem ich den C ++ - Quellcode verloren habe. Gibt es da draußen gute C ++ - Dekompilierer?
Ich bin schon auf Boomerang gestoßen .
Ich habe ein Programm, in dem ich den C ++ - Quellcode verloren habe. Gibt es da draußen gute C ++ - Dekompilierer?
Ich bin schon auf Boomerang gestoßen .
Antworten:
Sie können IDA Pro von Hex-Rays verwenden . Normalerweise erhalten Sie aus einer Binärdatei kein gutes C ++, es sei denn, Sie haben Debugging-Informationen kompiliert. Bereiten Sie sich darauf vor, viel Handarbeit zu leisten, um den Code umzukehren.
Wenn Sie die Binärdateien nicht entfernt haben, besteht Hoffnung, dass IDA Pro C-ähnlichen Code für Sie erstellen kann. Normalerweise ist es aber sehr rau, zumindest als ich es vor ein paar Jahren benutzt habe.
Informationen werden beim Kompilieren verworfen. Selbst wenn ein Dekompiler den logisch äquivalenten Code mit Klassen und allem erzeugen könnte (was wahrscheinlich nicht möglich ist), ist der selbstdokumentierende Teil im optimierten Release-Code verschwunden. Keine Variablennamen, keine Routinennamen, keine Klassennamen - nur Adressen.
Ja, aber keiner von ihnen wird es schaffen, lesbaren Code zu erstellen, der die Mühe wert ist. Sie werden mehr Zeit damit verbringen, die dekompilierte Quelle mit Assembler-Blöcken zu lesen, als Ihre alte App von Grund auf neu zu schreiben.
Ich habe keine Dekompilierer gesehen, die C ++ - Code generieren. Ich habe einige experimentelle gesehen, die einen vernünftigen Versuch zur Generierung von C-Code unternehmen, aber sie waren in der Regel davon abhängig, dass sie den Codegenerierungsmustern eines bestimmten Compilers entsprechen (das hat sich möglicherweise geändert, es ist eine Weile her, seit ich dies das letzte Mal untersucht habe ). Natürlich werden alle symbolischen Informationen verschwunden sein. Google für "Dekompiler".
Je nachdem, wie groß und wie gut der ursprüngliche Code geschrieben war, kann es sich lohnen, erneut in Ihrer Lieblingssprache (die möglicherweise noch C ++ ist) zu beginnen und aus Fehlern zu lernen, die in der letzten Version gemacht wurden. Hat nicht jemand einmal darüber gesprochen, einen zu schreiben, um ihn wegzuwerfen?
nb Wenn es sich um ein riesiges Produkt handelt, ist es möglicherweise nicht die Zeit wert.
objdump
für Linux