8
votes

Recompilez la source décompilée Java (JD / Jad) qui contient des instructions goto

(question connexe: compilateurs Java ou JVM Langues qui supportent GOTO? )

J'ai décompilé un pot (légalement, à des fins de débogage) et je veux le recompiler.

J'ai utilisé à la fois Jad et JD et les deux Ne compilez pas en raison d'instructions Goto

par exemple xxx

y a-t-il un moyen facile (ou de quelque manière que ce soit) de le recompiler? (Sauf refacteur manuellement et retirez le goto 's)



2 commentaires

Il est possible de mettre en œuvre goto en utilisant des exceptions, mais ce ne serait pas joli. Certaines autres astuces sont collectées ici: Stackoverflow.com / Questions / 2430782 / ...


Que diriez-vous de remplacer simplement goto l1 avec retourne vrai; ? :)


4 Réponses :


10
votes

Non, il n'y a pas. Dans votre cas, ni JD ni Jad n'ont pu décompiler correctement les fichiers de classe. Les déclarations «goto» sont un indice sur le flux de programme actuel.

Vous pouvez contacter directement l'équipe Java Decompiler, envoyer dans un fichier de classe où la décompilation entraîne un code source illégal et demander s'il s'agit d'un bogue dans la version actuelle ou une fonctionnalité qui n'a pas encore été mise en œuvre.


0 commentaires

4
votes

Tous les décompileurs recherchent des modèles de code correspondant aux constructions source Java et choisissent la source qui correspond au mieux.

Apparemment, le code que vous avez n'est pas conforme à aucun motif stocké dans JAD ou JD, de sorte que vous obtenez une source java inabiletable. Ceci est probablement parce que Jad n'a pas été activement développé depuis plusieurs années.

Je vous suggérerais de regarder le projet SOOT qui a un décompiler beaucoup plus agressif.

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


0 commentaires

8
votes

Jad est un décompiler vraiment incroyable, JD ... avoir des problèmes avec les déclarations "try-attraper-enfin".

Avez-vous essayez le décompiler de Stiver ( http://www.reversed-java.com/fernflower )?

Emmanuel, auteur de JD.


0 commentaires

0
votes

Je recommanderais un décompiler moderne - comme CFR ou Fernflower!

J'ai mis en ligne 6 décompileurs JAVA: JADX, FAST et avec support Android, CFR (Soutien Java 8), JDCore (très rapide), Procyon, Fernflower et Jad (très rapide, mais obsolètes).

On peut les utiliser sans installation ici: http://www.javadecompilers.com/


0 commentaires