当前位置: 首页 > 面试题库 >

选择并测试Java反编译器

习胤运
2023-03-14
问题内容

现在,我试图找到最好的java反编译器,我发现了这些:

  • http://java.decompiler.free.fr/
  • http://www.reversed-java.com/fernflower/
  • http://dj.navexpress.com/
  • http://cavaj-java-decompiler.en.softonic.com/

使用这些反编译器,我可以处理此类的字节码:

public class ss
{
public static void main(String args[])
{
  try{
   System.out.println("try");

  }
  catch(Exception e)
  {
   System.out.println("catch");
  }
  finally
  {System.out.println("finally");}
}
}

我得到以下结果:

白花菜:

public class ss {

   public static void main(String[] var0) {
      try {
         System.out.println("try");
      } catch (Exception var5) {
         System.out.println("catch");
      } finally {
         System.out.println("finally");
      }

   }
}

DJ Java反编译器:

import java.io.PrintStream;

public class ss
{

    public ss()
    {
    }

    public static void main(String args[])
    {
        System.out.println("try");
        System.out.println("finally");
        break MISSING_BLOCK_LABEL_50;
        Exception exception;
        exception;
        System.out.println("catch");
        System.out.println("finally");
        break MISSING_BLOCK_LABEL_50;
        Exception exception1;
        exception1;
        System.out.println("finally");
        throw exception1;
    }
}

卡瓦吉:

import java.io.PrintStream;

public class ss
{

    public ss()
    {
    }

    public static void main(String args[])
    {
        System.out.println("try");
        System.out.println("finally");
        break MISSING_BLOCK_LABEL_50;
        Exception exception;
        exception;
        System.out.println("catch");
        System.out.println("finally");
        break MISSING_BLOCK_LABEL_50;
        Exception exception1;
        exception1;
        System.out.println("finally");
        throw exception1;
    }
}

http://java.decompiler.free.fr/ :

import java.io.PrintStream;
public class ss
{
  public static void main(String[] paramArrayOfString)
  {
    try
    {
      System.out.println("try");
    }
    catch (Exception localException)
    {
      System.out.println("catch");
    }
    finally {
      System.out.println("finally");
    }
  }
}

我看到反编译器的最佳结果:http :
//java.decompiler.free.fr/

为了测试,我编写了非常简单的代码。您如何看待,编写什么代码来测试反编译器?也许这个想法比最终尝试{} catch(){}更好{}?


问题答案:

用于测试的代码应 测试JDK中用于编译目标类的可用功能 。例如,如果您知道您的目标是用Java
1.5编写的,则可以合理地假设代码可能包含泛型,因此您将要确保所选的反编译器能够正确处理它们。根据我的经验,就其1-2版本支持的功能而言,免费提供的反编译器往往落后于JDK版本。

根据个人的尝试和错误,JD通常会做得最好。但是,如果要反编译用1.3或更低版本编写的代码,我还建议您尝试一下JODE。

五年后编辑:

CFR,Procyon和Fernflower在此领域处于领先地位。



 类似资料:
  • 问题内容: 我正在尝试反编译 Java项目(.jar)文件,并且能够从其中获取.java文件。现在如何将其编译回来?我可以将.java文件作为单个文件添加到Netbeans。但是如何将其作为项目添加并编译呢?该项目是JavaFX项目。所以请帮我。 问题答案: 有很多方法可以实现此目的,但是我认为您不能像这样直接在框内(在本例中为开箱)将项目导入jar中。 我们可以使用最基本的技术(我承认有点脏),

  • 问题内容: 您可以推荐用于Eclipse的Java反编译器吗?我的其他问题是,使用来自其他Java程序的反编译代码有什么限制?非法还是什么?我对许可证知之甚少。谢谢阅读。 问题答案: 我建议在Google上弹出一个JD Java反编译器。它真的很好。 至于限制,您必须阅读特定软件的许可,否则可能会写明禁止任何反编译方式。

  • 我是Android Studio的初学者,我希望主要活动是在java上而不是在kotlin上。我测试了一些可用的堆栈溢出解决方案,例如: Menu->Tools->Kotlin->将kotlin反编译到java 菜单>工具>Kotlin>显示Kotlin字节码 单击“反编译”按钮 复制java代码 并且总是禁用“反编译”按钮。

  • Gradle的Groovy插件声称它支持联合编译,允许自由混合和匹配Groovy和Java代码,并在两个方向上都有依赖关系“。 但是,我不认为这适用于测试代码。 我在使用位于中的类。 当尝试使用Gradle构建时,我会遇到如下错误: 请注意,是一个尚未编译的Groovy类(在Gradle输出中,我可以看到它在尝试之前没有运行,因为前者依赖于后者)。 我能够使用groovy-eclipse插件与Ma

  • android { compileOptions { sourceCompatibility = "1.6" targetCompatibility = "1.6" } } 默认值是“1.6”。这个设置将影响所有task编译Java源代码。

  • 在Windows下,可执行程序(Executable Program)大部分是 .exe 程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。 计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。 直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁