重新编译包含goto指令的反编译Java(JD / JAD)源

(相关问题: 支持goto的Java编译器或JVM语言? )

我已经反编译了一个jar(法律上,出于调试目的)并想要重新编译它。

我已经使用了JAD和JD,并且由于goto指令都没有编译

例如

goto _L1 ... L1: return true; 

是否有一种简单的方法(或任何方式)重新编译它? (除了手动重构和删除goto


不,没有。 在您的情况下,JD和JAD都无法正确反编译类文件。 ‘goto’语句是关于实际程序流程的提示。

您可以直接联系Java Decompiler团队,发送一个类文件,其中反编译会导致非法源代码,并询问它是否是当前版本中的错误或尚未实现的function。

JAD是一个非常神奇的反编译器,JD ……在“try-catch-finally”语句中遇到了一些问题。

您是否尝试过Stiver的反编译器( http://www.reversed-java.com/fernflower )?

JD的作者Emmanuel。

所有反编译器都会查找与Java源代码构造相对应的代码模式,并选择最适合的源代码。

显然,您拥有的代码不符合存储在JAD或JD中的任何模式,因此您将获得无法编译的Java源代码。 这很可能是因为JAD多年来一直没有积极开发。

我建议你看看有一个更积极的反编译器的Soot项目。

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

我会推荐一个现代的反编译器 – 比如CFR或FernFlower!

我把在线6个Java反编译器:Jadx,快速和Android支持,CFR(支持Java 8),JDCore(非常快),Procyon,Fernflower和JAD(非常快,但过时)。

可以在没有安装的情况下使用它们: http : //www.javadecompilers.com/

    Interesting Posts