(相关问题:支持 goto 的 Java 编译器或 JVM 语言?)
我已经反编译了一个 jar(合法地,出于调试目的)并想重新编译它。
我同时使用了JAD和JD,但由于 goto 指令,两者都无法编译
例如
goto _L1
...
L1:
return true;
有没有一种简单的方法(或任何方法)来重新编译它?(除了手动重构和删除goto
's)
(相关问题:支持 goto 的 Java 编译器或 JVM 语言?)
我已经反编译了一个 jar(合法地,出于调试目的)并想重新编译它。
我同时使用了JAD和JD,但由于 goto 指令,两者都无法编译
例如
goto _L1
...
L1:
return true;
有没有一种简单的方法(或任何方法)来重新编译它?(除了手动重构和删除goto
's)
不,没有。在您的情况下,JD 和 JAD 都无法正确反编译类文件。“goto”语句是关于实际程序流程的提示。
您可以直接联系 Java Decompiler 团队,发送反编译导致非法源代码的类文件,并询问这是当前版本中的错误还是尚未实现的功能。
JAD 是一个非常了不起的反编译器,JD ......“try-catch-finally”语句存在一些问题。
你试过 Stiver 的反编译器 ( http://www.reversed-java.com/fernflower ) 吗?
伊曼纽尔,JD 的作者。
所有反编译器都会寻找与 Java 源代码结构相对应的代码模式,并选择最适合的源代码。
显然,您拥有的代码不符合存储在 JAD 或 JD 中的任何模式,因此您获得了不可编译的 Java 源代码。这很可能是因为 JAD 已经好几年没有被积极开发了。
我建议您查看具有更激进的反编译器的 Soot 项目。
我会推荐一个现代的反编译器——比如 CFR 或 FernFlower!
我在网上放了 6 个 Java 反编译器:Jadx,快速且支持 Android,CFR(支持 Java 8),JDCore(非常快),Procyon,Fernflower 和 JAD(非常快,但已经过时)。
无需安装即可使用它们:http ://www.javadecompilers.com/