Un descompilador de Java és un tipus especial de descompilador que pren un fitxer de classe com a entrada i produeix el codi font de Java com a sortida. La descompilació és exactament el procés invers de la compilació. Per tant, el descompilador no produeix una rèplica del codi font. És perquè es va perdre una mica d'informació del codi font durant la compilació del programa.
Però hi ha moltes complexitats, per exemple, el codi Java està estructurat i el codi byte no està estructurat. A més, la transformació no és d'un a un: dos programes Java diferents poden produir el mateix codi de bytes.
Hi ha disponibles els següents descompiladors de Java:
- DJ Java Descompiler
- JReversePro
- jueus
- JD-CORE/ JD-GUI/ JD Eclipse
Descompilador JAD
El JAD és una aplicació de línia d'ordres. Està escrit en C++. La funció principal és desmuntar els fitxers .class. El JAD es pot desplegar des de la consola i descompilar les classes Java al codi font. D'aquesta manera, els desenvolupadors poden aprofundir en el codi de les biblioteques d'execució de Java i fins i tot embellir les línies, preparant-les per a una recompilació. Hi ha un risc de sobreescriure dels fitxers de codi font, especialment quan s'utilitza el paràmetre '-o' (sobreescriure fitxers de sortida sense confirmació).
Exemple
Creem un programa Java senzill que afegeixi dos números.
import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } }
Seguiu els passos per convertir el .class en codi font de Java llegible. Aquí estem utilitzant el descompilador JAD.
Pas 1: Baixeu l'eina JAD de https://bit.ly/2XuRzT5
Pas 2: Extraieu el fitxer zip i obteniu jad.exe.
Pas 3: Creeu un fitxer .java (DecompilerDemo.java) a la mateixa carpeta on heu extret el fitxer zip.
pitó tupla ordenat
Pas 4: Compileu i executeu el fitxer .java. Generarà un fitxer .class a la carpeta corresponent.
Pas 5: Ara moveu el fitxer .class i l'aplicació jad a una altra carpeta.
Pas 6: Escriviu l'ordre: jad DecompilerDemo
L'ordre anterior genera un fitxer .jad a la carpeta corresponent.
Pas 7: Escriviu l'ordre: jad ?s java DecompilerDemo
ipconfig gratuït
Genera el fitxer .java a la mateixa carpeta.
Obrim el DecompilerDemo.java obtenim el següent codi:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } }
Podem observar que el fitxer .java escrit és diferent del fitxer .java generat però dóna la mateixa sortida.
Desensamblador de fitxers de classe Java
comanda javap
El javap és una eina de línia d'ordres Java que ve amb JDK. S'utilitza per desmuntar el fitxer de classe i imprimeix una versió llegible per l'home d'aquesta classe. La seva sortida depèn de l'opció utilitzada. Sense utilitzar cap opció, javap imprimeix el paquet, els camps protegits i públics i els mètodes de les classes que se li han passat. A javap també s'utilitza per esbrinar quins mètodes estan disponibles per a una classe si no teniu el codi font que s'ha utilitzat per crear la classe. El format general de l'ordre javap és:
javap [options] filename
Opcions
Amb l'ordre javap, hi ha moltes opcions disponibles. Alguns d'ells són:
Desmunteu un fitxer de classe mitjançant l'ordre javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Genereu el fitxer de classe del programa anterior i utilitzeu l'ordre següent per desmuntar el fitxer de classe.
javap -c -p DisassembleDemo
Sortida
La sortida següent mostra què té el fitxer de classe dins.
Però no obtenim el codi font de Java mitjançant l'ordre javap. Per tant, hi ha molts descompiladors disponibles que converteixen un fitxer .class en un fitxer .java.