Un decompilatore Java è un tipo speciale di decompilatore che accetta un file di classe come input e produce codice sorgente Java come output. La decompilazione è esattamente il processo inverso della compilazione. Pertanto, il decompilatore non produce una replica del codice sorgente. Ciò è dovuto alla perdita di alcune informazioni dal codice sorgente durante la compilazione del programma.
Ma ci sono molte complessità, ad esempio il codice Java è strutturato e il codice byte non è strutturato. Inoltre, la trasformazione non è uno a uno: due diversi programmi Java possono produrre un bytecode identico.
Sono disponibili i seguenti decompilatori Java:
finestra.apri javascript
- Decompilatore Java per DJ
- JReversePro
- EBREI
- JD-CORE/JD-GUI/JD Eclipse
Decompilatore JAD
JAD è un'applicazione da riga di comando. È scritto in C++. La funzione principale è disassemblare i file .class. JAD può essere distribuito dalla console e decompilerà le classi Java nel codice sorgente. In questo modo, gli sviluppatori possono approfondire il codice delle librerie runtime Java e persino abbellirne le linee, preparandole per una ricompilazione. Esiste il rischio di sovrascrittura dei file del codice sorgente, soprattutto quando viene utilizzato il parametro '-o' (sovrascrivi file di output senza conferma).
Esempio
Creiamo un semplice programma Java che aggiunge due numeri.
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); } }
Segui i passaggi per convertire il file .class in codice sorgente Java leggibile. Qui stiamo usando il decompilatore JAD.
Passo 1: Scarica lo strumento JAD da https://bit.ly/2XuRzT5
programma c per il confronto di stringhe
Passo 2: Estrai il file zip e ottieni jad.exe.
Passaggio 3: Crea un file .java (DecompilerDemo.java) nella stessa cartella in cui hai estratto il file zip.
Passaggio 4: Compila ed esegui il file .java. Genererà un file .class nella rispettiva cartella.
Passaggio 5: Ora sposta il file .class e l'applicazione jad in un'altra cartella.
Passaggio 6: Digita il comando: jad DecompilerDemo
Il comando precedente genera un file .jad nella rispettiva cartella.
Passaggio 7: Digita il comando: jad ?s java DecompilerDemo
Genera il file .java nella stessa cartella.
Apriamo il DecompilerDemo.java otteniamo il seguente codice:
// 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()); } }
Possiamo osservare che il file .java scritto è diverso dal file .java generato ma fornisce lo stesso output.
Disassemblatore di file di classe Java
comando javap
algoritmo Mergesort
IL javap è uno strumento da riga di comando Java fornito con JDK. Viene utilizzato per disassemblare il file di classe e stampare una versione leggibile di quella classe. Il suo output dipende dall'opzione utilizzata. Senza utilizzare alcuna opzione, javap stampa il pacchetto, i campi protetti e pubblici e i metodi delle classi che gli vengono passate. UN javap viene utilizzato anche per scoprire quali metodi sono disponibili per una classe se non si dispone del codice sorgente utilizzato per creare la classe. Il formato generale del comando javap è:
javap [options] filename
Opzioni
npm svuota la cache
Con il comando javap sono disponibili molte opzioni. Alcuni di loro sono:
Disassemblare un file di classe utilizzando il comando javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Genera il file di classe del programma precedente e utilizza il seguente comando per disassemblare il file di classe.
javap -c -p DisassembleDemo
Produzione
Il seguente output mostra cosa contiene il file di classe.
Ma non otteniamo il codice sorgente Java utilizzando il comando javap. Quindi sono disponibili molti decompilatori che convertono un file .class in un file .java.