41 votes

Choisir et tester java decompiler

Maintenant, je vais essayer de trouver le meilleur java decompiler, j'ai trouvé ceux-ci:

Avec ces décompilation j'poignée d'octets de code de cette classe:

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

et j'ai obtenu les résultats suivants:

fernflower:

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

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

Je vois que le meilleur résultat dans decompiler: http://java.decompiler.free.fr/

Pour tester, j'ai écrit très simple code. Que pensez-vous, quel est le code à écrire pour tester la décompilation? Peut-être que l'idée est de mieux qu'un try{} catch(){} finally{}?

25voto

justingarrick Points 4555

Le code que vous utilisez pour ce test doit tester les fonctionnalités disponibles dans le JDK utilisé pour compiler la classe cible. Par exemple, si vous savez que votre cible est écrit en Java 1.5, il est raisonnable de supposer que le code peut inclure des médicaments génériques, de sorte que vous voulez vous assurer que votre choisi decompiler les traite correctement. Dans mon expérience, l'librement disponible décompilation sont en décalage avec le JDK rejets en termes de fonctionnalités qu'ils soutiennent, de 1 ou 2 versions.

Basé sur l'essai et l'erreur, JD a tendance à faire le meilleur travail en général. Toutefois, si vous êtes à la décompilation du code qui a été écrit en 1.3 ou plus bas, je voudrais aussi vous suggère de donner JODE un essai.

10voto

Janus Troelsen Points 5121

8voto

Anant Points 61

J'ai été en utilisant http://java.decompiler.free.fr/ pour un long moment maintenant, et l'a trouvé pour être le meilleur. En particulier, je l'ai utilisé pour décompiler un tiers pot et j'ai été en mesure de modifier le code source ainsi avec elle.

Il est facile à utiliser et l'INTERFACE utilisateur est également soignée et propre.

6voto

Stiver Points 460

Si vous prévoyez d'obtenir de résultats significatifs, vous devriez vraiment tester avec un peu plus de non-trivial de code. Fernflower a été créé avec le but de la manipulation de très inhabituel et d'obfuscation du bytecode. Ainsi, la décompilation simple des extraits est pas une grosse affaire. Par ailleurs, si vous êtes intéressé par les tests de la version stand-alone de Fernflower envoyez-moi une note à fernflower(dot)decompiler(at)gmail(dot)com. La Version 0.8.4 est maintenant en semi-public beta (cependant pas disponible sur le site web).

6voto

Stephen C Points 255558

Il ressemble fernflower et JD Java Decompiler sont la production de décompiler le code qui est aussi bon que possible dans ce cas de test. Les deux autres ne font pas un bon travail, de l'OMI.

Que pensez-vous, quel est le code à écrire pour tester la décompilation?

  1. Écrire plus de code compliqué en utilisant toutes les constructions.
  2. Essayez sur certains de code réel.
  3. Essayez sur certains de code réel qui a été occulté.

Lorsque vous essayez de code que vous compilez à partir de la source, d'expérimenter avec différents "-g" options, et avec différents compilateurs Java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X