8

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

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

我同时使用了JADJD,但由于 goto 指令,两者都无法编译

例如

      goto _L1

      ...
      L1: 
      return true;

有没有一种简单的方法(或任何方法)来重新编译它?(除了手动重构和删除goto's)


4

4 回答 4

10

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

您可以直接联系 Java Decompiler 团队,发送反编译导致非法源代码的类文件,并询问这是当前版本中的错误还是尚未实现的功能。

于 2010-01-10T12:39:13.787 回答
8

JAD 是一个非常了不起的反编译器,JD ......“try-catch-finally”语句存在一些问题。

你试过 Stiver 的反编译器 ( http://www.reversed-java.com/fernflower ) 吗?

伊曼纽尔,JD 的作者。

于 2010-02-25T19:48:15.800 回答
4

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

显然,您拥有的代码不符合存储在 JAD 或 JD 中的任何模式,因此您获得了不可编译的 Java 源代码。这很可能是因为 JAD 已经好几年没有被积极开发了。

我建议您查看具有更激进的反编译器的 Soot 项目。

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

于 2010-01-10T13:14:20.043 回答
0

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

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

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

于 2015-08-21T11:26:43.017 回答