重新编译反编译的包含 goto 指令的 Java (JD / JAD) 源
-
19-09-2019 - |
题
(相关问题: 支持 goto 的 Java 编译器或 JVM 语言?)
我已经反编译了一个 jar (合法地,用于调试目的)并想要重新编译它。
我都用过 杰德 和 京东 由于 goto 指令,两者都无法编译
例如。
goto _L1
...
L1:
return true;
有没有一种简单的方法(或任何方法)来重新编译它?(除了手动重构并删除 goto
的)
解决方案
不,没有。在您的情况下,JD 和 JAD 都无法正确反编译类文件。“goto”语句是有关实际程序流程的提示。
您可以直接联系Java Decompiler团队,发送一个反编译出非法源代码的class文件,询问是否是当前版本的bug或者尚未实现的功能。
其他提示
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/
不隶属于 StackOverflow