Dekompilering av klasser i Java

1. Introduktion

I denna handledning diskuterar vi dekompilering av Java-klasser. När källkoden inte är tillgänglig hjälper dekompilering av Java-klasser att felsöka och förstå källkodsbeteende.

Låt oss ta en titt på de olika tillgängliga alternativen.

2. Dekompilering i IDE

Eftersom den mesta utvecklingen sker i en integrerad utvecklingsmiljö (IDE) är det vettigt att dekompilering också ska ske i en IDE.

För mer information om IDE: erna vi kommer att arbeta med, kolla in våra artiklar om hur man felsöker i Eclipse och konfiguration för IntelliJ IDEA.

2.1. Förmörkelse

För det första, i Eclipse behöver vi ett plugin som Enhanced Class Decompiler (ECD). Detta plugin använder fem olika dekompilatorer. Vi kan installera den från Eclipse Marketplace och sedan måste vi starta om Eclipse.

Därefter kräver ECD en liten mängd installation för att associera klassfiler till Class Decompiler Viewer:

Vi måste också associera filer med " .class without source":

Slutligen kan vi använda dekompilatorn genom att trycka på Ctrl + vänsterklicka på ett klassnamn . Vi ser dekompilern som används på filfliken inom parentes.

I det här exemplet använder vi FernFlower:

2.2. IntelliJ IDEA

Till skillnad från Eclipse tillhandahåller IntelliJ IDEA FernFlower-dekompilern som standard .

För att använda den helt enkelt Ctrl + vänsterklickar du på ett klassnamn och visar koden:

Vi kan också ladda ner källan. Nedladdning av källan ger den faktiska koden och kommentarerna.

Exempelvis inkluderar komponentannoteringsklassen från ovanstående skärmdump Javadoc om användningen av komponent . Vi kan märka skillnaden:

Medan dekompilering är till stor hjälp ger det inte alltid en fullständig bild . Hela källkoden ger oss en fullständig bild.

3. Kommandoradsavkompilering

Innan IDE-plugins användes kommandoraden för dekompilering av klasser. Kommandoradsdekompilerare kan också vara användbara för felsökning av Java-bytkod på en fjärrserver som inte är tillgänglig med IDE eller GUI.

Vi kan till exempel dekompilera med JDCommandLine med ett enkelt jar-kommando:

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

Lämna inte bort parametern ./classes. Den definierar utdatakatalogen.

Efter lyckad dekompilering kan vi komma åt källfilerna i utdatakatalogen. De är nu redo att visa genom en textredigerare som Vim.

4. Slutsats

Vi tittade på dekompilering i Eclipse och IntelliJ IDEA IDEs samt ett kommandoradsalternativ när de inte är tillgängliga.

Vi tittade också på skillnaden mellan att länka källkod och dekompilering.