2010-01-10 8 views
8

(Verwandte Frage: Java compilers or JVM languages that support goto?)Recompile dekompilierten Java (JD/JAD) Quelle, die goto Anweisungen enthält

ich ein Glas dekompilierten haben (Rechtlich Zwecke für die Fehlersuche) und wollen es neu zu kompilieren.

Ich habe beide JAD und JD verwendet und beide nicht kompilieren aufgrund goto Anweisungen

Z.B.

 goto _L1 

     ... 
     L1: 
     return true; 

Gibt es einen einfachen Weg (oder irgendeine Weise), es neu zu kompilieren? (Außer manuell Refactoring und entfernen Sie die goto ‚s)


+0

Es ist möglich, 'zu implementieren goto' Ausnahmen verwenden, aber es wäre nicht schön sein. Einige andere Betrüger sind hier gesammelt: http://stackoverflow.com/questions/2430782/alternative-to-goto-statement-in-java – BRFennPocock

+0

Wie wäre es, ersetzen Sie einfach 'goto L1' mit' return true; '? :) – fredoverflow

Antwort

10

Nein, gibt es nicht. In Ihrem Fall konnten weder JD noch JAD die Klassendateien korrekt dekompilieren. Die 'goto' Anweisungen sind ein Hinweis auf den tatsächlichen Programmablauf.

Sie könnten das Java Decompiler-Team direkt kontaktieren, eine Klassendatei senden, in der die Dekompilierung zu illegalem Quellcode führt, und fragen, ob es sich um einen Fehler in der aktuellen Version oder um ein noch nicht implementiertes Feature handelt.

3

Alle Dekompiler suchen nach Codemustern, die den Java-Quellkonstruktionen entsprechen, und wählen die Quelle aus, die am besten passt.

Anscheinend entspricht der Code, den Sie haben, keinem Muster, das in JAD oder JD gespeichert ist, so dass Sie eine kompilierbare Java-Quelle erhalten. Dies liegt wahrscheinlich daran, dass JAD seit mehreren Jahren nicht aktiv entwickelt wurde.

Ich würde vorschlagen, Sie betrachten das Soot-Projekt, das einen viel aggressiveren Decompiler hat.

http://www.sable.mcgill.ca/soot/

8

JAD ist ein wirklich erstaunlich Decompiler, JD ... haben einige Probleme mit den "Try-catch-finally" Aussagen.

Haben Sie den Dekompiler von Stiver (http://www.reversed-java.com/fernflower) versucht?

Emmanuel, Autor von JD.

+2

Gerade versuchte Emmanuel JD, funktioniert wie ein Charme. –

0

Ich würde einen modernen Decompiler empfehlen - wie CFR oder FernFlower!

Ich lege online 6 Java-Decompiler: Jadx, schnell und mit Android-Unterstützung, CFR (unterstützt Java 8), JDCore (sehr schnell), Procyon, Fernflower und JAD (sehr schnell, aber veraltet).

Man kann sie ohne Installation verwenden hier: http://www.javadecompilers.com/