java - 选择和测试java反编译器

标签 java decompiler

现在我正在努力寻找最好的 java 反编译器,我找到了这些:

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

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;
    }
}

cavaj:

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/

为了测试,我写了非常简单的代码。你怎么看,写什么代码来测试反编译器?也许这个想法比 try{} catch(){} finally{} 更好?

最佳答案

您用于测试的代码应该测试 JDK 中用于编译目标类的可用功能。例如,如果您知道您的目标是用 Java 1.5 编写的,那么假设代码可能包含 generics 是合理的。 ,因此您需要确保您选择的反编译器正确处理它们。根据我的经验,免费提供的反编译器在 1-2 版本支持的功能方面往往落后于 JDK 版本。

基于个人的反复试验,JD一般来说,他们往往做得最好。但是,如果您要反编译以 1.3 或更低版本编写的代码,我还建议您提供 JODE试一试。

编辑,5 年后:

CFR , Procyon , 和 Fernflower在这个领域引领潮流。

关于java - 选择和测试java反编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898391/

相关文章:

Java gui如何获取文本框的大小

java - 编写 Java 代码或任何其他语言时,系统调用是如何完成的?

java - 如何以编程方式将值编译为源文字?

c# - 为什么我们可以轻松反编译.NET程序集?

python - 在 Python 中使用并从 Apk 导入 .SO native 库

java - 为 Eclipse Java EE IDE 配置 JD-Eclipse Java Decompiler 插件

JavaFX 检查 Node 属性是否正在被监听

java - 如何在小部件和 Activity 之间共享私有(private)文件?

java - 我想最小化@Transactional 的范围吗?

java - 最新的 Java 更新后 Runtime.exec 不起作用?