Decompilazione di classi in Java

1. Introduzione

In questo tutorial, discuteremo della decompilazione delle classi Java. Quando il codice sorgente non è disponibile, la decompilazione delle classi Java aiuta a eseguire il debug e comprendere il comportamento del codice sorgente.

Diamo un'occhiata alle diverse opzioni disponibili.

2. Decompilare in IDE

Poiché la maggior parte dello sviluppo viene eseguita in un ambiente di sviluppo integrato (IDE), è logico che la decompilazione avvenga anche in un IDE.

Per maggiori informazioni sugli IDE con cui lavoreremo, consulta i nostri articoli su come eseguire il debug in Eclipse e la configurazione per IntelliJ IDEA.

2.1. Eclisse

Innanzitutto, in Eclipse abbiamo bisogno di un plugin come Enhanced Class Decompiler (ECD). Questo plugin utilizza cinque diversi decompilatori. Possiamo installarlo da Eclipse Marketplace e quindi dobbiamo riavviare Eclipse.

Successivamente, ECD richiede una piccola quantità di configurazione per associare i file di classe al Visualizzatore decompilatore di classi:

Inoltre, dobbiamo associare i file " .class senza sorgente":

Infine, possiamo usare il decompilatore premendo Ctrl + clic sinistro sul nome di una classe . Vediamo il decompilatore utilizzato nella scheda file tra parentesi.

In questo esempio, stiamo usando FernFlower:

2.2. IntelliJ IDEA

A differenza di Eclipse, IntelliJ IDEA fornisce il decompilatore FernFlower come impostazione predefinita .

Per usarlo, basta Ctrl + clic sinistro sul nome di una classe e visualizzare il codice:

Inoltre, possiamo scaricare la fonte. Il download del sorgente fornirà il codice ei commenti effettivi.

Ad esempio, la classe di annotazione Component dallo screenshot sopra include Javadoc sull'uso di Component . Possiamo notare la differenza:

Sebbene la decompilazione sia molto utile, non sempre fornisce un quadro completo . Il codice sorgente completo ci fornisce un quadro completo.

3. Decompilazione della riga di comando

Prima dei plug-in IDE, la riga di comando veniva utilizzata per decompilare le classi. I decompilatori della riga di comando possono anche essere utili per eseguire il debug del bytecode Java su un server remoto non accessibile con un IDE o una GUI.

Ad esempio, possiamo decompilare con JDCommandLine usando un semplice comando jar:

java -jar JDCommandLine.jar ${TARGET_JAR_NAME}.jar ./classes

Non lasciare fuori il parametro ./classes. Definisce la directory di output.

Dopo la corretta decompilazione, possiamo accedere ai file sorgente contenuti nella directory di output. Ora sono pronti per essere visualizzati tramite un editor di testo come Vim.

4. Conclusione

Abbiamo esaminato la decompilazione negli IDE Eclipse e IntelliJ IDEA nonché un'opzione della riga di comando quando non sono disponibili.

Abbiamo anche esaminato la differenza tra il collegamento del codice sorgente e la decompilazione.