选择并测试 java 反编译器 [已关闭]

2022-09-01 02:04:33

现在我试图找到最好的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 Decompiler:

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(){}最后{}更好?


答案 1

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

基于个人的反复试验,京东总体上倾向于做得最好。但是,如果你正在反编译用1.3或更低版本编写的代码,我也建议你试试JODE

编辑,5年后:

CFRProcyonFernflower在这个领域处于领先地位。


推荐