Dekompilering af klasser i Java

1. Introduktion

I denne vejledning diskuterer vi dekompilering af Java-klasser. Når kildekode ikke er tilgængelig, hjælper dekompilering af Java-klasser til fejlfinding og forstå kildekodeadfærd.

Lad os se på de forskellige tilgængelige muligheder.

2. Dekompilering i IDE

Da mest udvikling sker i et integreret udviklingsmiljø (IDE), er det fornuftigt, at dekompilering også skal finde sted i en IDE.

For mere information om de IDE'er, vi vil arbejde med, se vores artikler om, hvordan man debugger i formørkelse og konfiguration til IntelliJ IDEA.

2.1. Formørkelse

For det første har vi i Eclipse brug for et plugin såsom Enhanced Class Decompiler (ECD). Dette plugin bruger fem forskellige decompilere. Vi kan installere det fra Eclipse Marketplace, og så skal vi genstarte Eclipse.

Dernæst kræver ECD en lille mængde opsætning for at knytte klassefiler til Class Decompiler Viewer:

Vi skal også forbinde “.klasse uden kildefiler:

Endelig kan vi bruge dekompileren ved at trykke på Ctrl + Venstreklik på en klasse navn. Vi ser dekompileren brugt på filfanen i parentes.

I dette eksempel bruger vi FernFlower:

2.2. IntelliJ IDEA

I modsætning til Eclipse, IntelliJ IDEA leverer FernFlower-dekompileren som standard.

For at bruge det, vi simpelthen Ctrl + Venstreklik på et klassenavn og se koden:

Vi kan også downloade kilden. Download af kilden giver den aktuelle kode og kommentarer.

For eksempel Komponent annoteringsklasse fra ovenstående skærmbillede inkluderer Javadoc om brugen af Komponent. Vi kan bemærke forskellen:

Mens dekompilering er meget nyttigt, giver det ikke altid et komplet billede. Den fulde kildekode giver os et komplet billede.

3. Kommandolinjedekompilering

Før IDE-plugins blev kommandolinjen brugt til dekompilering af klasser. Kommandoliniedekompilere kan også være nyttige til fejlfinding af Java-bytecode på en ekstern server, der ikke er tilgængelig med en IDE eller GUI.

For eksempel kan vi dekompilere med JDCommandLine ved hjælp af en simpel jar-kommando:

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

Forlad ikke parameteren ./classes. Det definerer outputmappen.

Efter vellykket dekompilering kan vi få adgang til kildefilerne i outputmappen. De er nu klar til at se gennem en teksteditor som Vim.

4. Konklusion

Vi kiggede på dekompilering i Eclipse og IntelliJ IDEA IDE'er samt en kommandolinjemulighed, når de ikke er tilgængelige.

Vi så også på forskellen mellem at forbinde kildekode og dekompilering.


$config[zx-auto] not found$config[zx-overlay] not found