Java Decompiler, der mit Java 5 arbeitet (behandelt Enums neben anderen neuen Dingen)

8

Ich weiß, dass diese Frage schon unzählige Male gestellt wurde, aber ich bin speziell nach einem Decompiler, der enums korrekt behandeln würde (weil das jar, das ich dekompiliere, enums stark verwendet). Ich habe getestet, dass sowohl JAD und JD-GUI nicht.

Könnte jemand einen Decompiler empfehlen (im Idealfall funktioniert das unter Linux und kann problemlos mit dem gesamten Jar umgehen, ohne dass ich Shell Scripts schreiben muss)?

BEARBEITEN: Speziell habe ich Probleme mit Konstrukten wie:

%Vor%

sie werden dekompiliert (sowohl für JAD als auch für JD-GUI) als etwas wie:

%Vor%

wobei $SWITCH_TABLE$com$MyType() entweder überhaupt nicht deklariert ist oder nicht kompiliert wird.

    
Grzenio 24.10.2011, 11:25
quelle

2 Antworten

2

Es ist nicht möglich, einen Enum-Schalter ordnungsgemäß zu dekompilieren. Die Java-Classfile kennt den Enum-Typ nach der Kompilierung nicht, daher kann Ihr Decompiler ihn nicht dekompilieren, wie Sie es mögen.

Enums-Typen sind alle ein Subtyp von java.lang.Enum , jede Enum-Konstante hat eine Ordinalzahl, die in einer switch-Anweisung verwendet wird. Der Compiler schaltet diesen int-Wert um, ein Switch über einen Enum-Typ heißt einfach syntaktischer Zucker. Wenn Sie versuchen, ein null -enum einzuschalten, erhalten Sie eine NPE.

    
Chriss 25.10.2011 12:52
quelle
2

Ich habe festgestellt, dass das Produkt eines Forschungsprojekts, CFR , Enums besonders gut behandelt .

Zu diesem Zeitpunkt schneiden JD-GUI und JAD nicht besser ab, als wenn die Frage des OP gestellt wurde, während die CFR-Version 0.43 eine korrekte, kompilierbare Quelle erzeugt, selbst wenn sie verschleierte Klassen gespeist hat.

    
Dave 15.11.2013 12:58
quelle

Tags und Links