Klassen decompileren in Java

1. Inleiding

In deze tutorial bespreken we het decompileren van Java-klassen. Als de broncode niet beschikbaar is, helpt het decompileren van Java-klassen bij het debuggen en begrijpen van broncodegedrag.

Laten we eens kijken naar de verschillende beschikbare opties.

2. Decompileren in IDE

Aangezien de meeste ontwikkeling plaatsvindt in een geïntegreerde ontwikkelomgeving (IDE), is het logisch dat decompilatie ook in een IDE moet plaatsvinden.

Voor meer informatie over de IDE's waarmee we zullen werken, bekijk onze artikelen over debuggen in Eclipse en configuratie voor IntelliJ IDEA.

2.1. Verduistering

Ten eerste hebben we in Eclipse een plug-in nodig, zoals de Enhanced Class Decompiler (ECD). Deze plug-in gebruikt vijf verschillende decompilers. We kunnen het installeren vanaf de Eclipse Marketplace en dan moeten we Eclipse opnieuw opstarten.

Vervolgens vereist ECD een kleine hoeveelheid instellingen om klassebestanden te koppelen aan de Class Decompiler Viewer:

We moeten ook '.klasse zonder bronbestanden:

Ten slotte kunnen we de decompiler gebruiken door op te drukken Ctrl + linkermuisknop op een klasse naam. We zien de decompiler die wordt gebruikt op de bestandstab tussen haakjes.

In dit voorbeeld gebruiken we FernFlower:

2.2. IntelliJ IDEE

In tegenstelling tot Eclipse, IntelliJ IDEA biedt standaard de FernFlower-decompiler.

Om het te gebruiken, we gewoon Ctrl + linkermuisknop op een klasnaam en bekijk de code:

We kunnen ook de bron downloaden. Als u de bron downloadt, worden de daadwerkelijke code en opmerkingen weergegeven.

Bijvoorbeeld de Component annotatieklasse uit de bovenstaande schermafbeelding bevat Javadoc over het gebruik van Component. We kunnen het verschil opmerken:

Hoewel decompilatie erg nuttig is, geeft het niet altijd een volledig beeld. De volledige broncode geeft ons een compleet beeld.

3. Commandoregel decompileren

Vóór IDE-plug-ins werd de opdrachtregel gebruikt voor het decompileren van klassen. Opdrachtregel-decompilers kunnen ook nuttig zijn voor het debuggen van Java-bytecode op een externe server die niet toegankelijk is met een IDE of GUI.

We kunnen bijvoorbeeld decompileren met JDCommandLine met behulp van een eenvoudig jar-commando:

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

Laat de parameter ./classes niet achterwege. Het definieert de uitvoermap.

Na succesvolle decompilatie hebben we toegang tot de bronbestanden in de uitvoermap. Ze zijn nu klaar om te bekijken via een teksteditor zoals Vim.

4. Conclusie

We hebben gekeken naar decompilatie in Eclipse en IntelliJ IDEA IDE's, evenals een opdrachtregeloptie wanneer deze niet beschikbaar zijn.

We hebben ook gekeken naar het verschil tussen het koppelen van broncode en decompilatie.


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