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

时间:2010-01-10 12:25:12

标签: java decompiling goto recompile jad

(相关问题:Java compilers or JVM languages that support goto?

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

我已使用JADJD,并且由于goto说明而无法编译

E.g。

      goto _L1

      ...
      L1: 
      return true;

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


4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:8)

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

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

Emmanuel,JD的作者。

答案 2 :(得分:4)

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

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

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

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

答案 3 :(得分:0)

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

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

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