(相关问题:Java compilers or JVM languages that support goto?)
我已经反编译了一个jar(合法地,出于调试目的)并且想要重新编译它。
E.g。
goto _L1
...
L1:
return true;
有没有简单的方法(或任何方式)重新编译它? (除了手动重构和删除goto
)
答案 0 :(得分:10)
不,没有。在您的情况下,JD和JAD都无法正确反编译类文件。 'goto'语句是关于实际程序流程的提示。
您可以直接联系Java Decompiler团队,发送一个类文件,其中反编译会导致非法源代码,并询问它是否是当前版本中的错误或尚未实现的功能。
答案 1 :(得分:8)
JAD是一个非常神奇的反编译器,JD ......在“try-catch-finally”语句中遇到了一些问题。
您是否尝试过Stiver的反编译器(http://www.reversed-java.com/fernflower)?
Emmanuel,JD的作者。答案 2 :(得分:4)
所有反编译器都会查找与Java源代码构造相对应的代码模式,并选择最适合的源代码。
显然,您拥有的代码不符合存储在JAD或JD中的任何模式,因此您将获得无法编译的Java源代码。这很可能是因为JAD多年来一直没有积极开发。
我建议你看一下Soot项目,它有一个更积极的反编译器。
答案 3 :(得分:0)
我会推荐一个现代的反编译器 - 比如CFR或FernFlower!
我把在线6个Java反编译器:Jadx,快速和Android支持,CFR(支持Java 8),JDCore(非常快),Procyon,Fernflower和JAD(非常快,但过时)。
可以在没有安装的情况下使用它们:http://www.javadecompilers.com/