(相关问题: 支持 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 项目,它有一个更激进的反编译器。

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

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

我网上放了6个Java反编译器:Jadx,速度快,支持 Android、CFR(支持 Java 8)、JDCore(非常快)、Procyon、Fernflower 和 JAD(非常快,但过时)。

无需安装即可使用它们: http://www.javadecompilers.com/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top