logo

Decompilatore Java

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.

Decompilatore Java

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.

Decompilatore Java2

Passaggio 5: Ora sposta il file .class e l'applicazione jad in un'altra cartella.

Decompilatore Java3

Passaggio 6: Digita il comando: jad DecompilerDemo

Decompilatore Java4

Il comando precedente genera un file .jad nella rispettiva cartella.

Decompilatore Java5

Passaggio 7: Digita il comando: jad ?s java DecompilerDemo

Decompilatore Java6

Genera il file .java nella stessa cartella.

Decompilatore Java7

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:

    -C:Stampa il codice disassemblato.-P:Mostra tutte le classi e i membri.-S:Stampa le firme di tipo interno.-costanti:Mostra le costanti finali statiche.

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.

Decompilatore Java8

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.