Dekompilering av klasser i Java

1. Introduksjon

I denne veiledningen vil vi diskutere dekompilering av Java-klasser. Når kildekoden ikke er tilgjengelig, hjelper dekompilering av Java-klasser til å feilsøke og forstå kildekodeatferd.

La oss ta en titt på de forskjellige alternativene som er tilgjengelige.

2. Dekompilering i IDE

Siden mest utvikling skjer i et integrert utviklingsmiljø (IDE), er det fornuftig at dekompilering også skal finne sted i en IDE.

For mer informasjon om IDEene vi skal jobbe med, sjekk ut artiklene våre om hvordan du feilsøker i formørkelse og konfigurasjon for IntelliJ IDEA.

2.1. Formørkelse

For det første, i Eclipse trenger vi et plugin som Enhanced Class Decompiler (ECD). Dette pluginet bruker fem forskjellige dekompilatorer. Vi kan installere den fra Eclipse Marketplace, og da må vi starte Eclipse på nytt.

Deretter krever ECD en liten mengde oppsett for å knytte klassefiler til Class Decompiler Viewer:

Vi må også knytte sammen “.klasse uten kildefiler:

Til slutt kan vi bruke dekompilatoren ved å trykke Ctrl + Venstreklikk på en klasse Navn. Vi ser dekompileren som brukes i filfanen i parentes.

I dette eksemplet bruker vi FernFlower:

2.2. IntelliJ IDEA

I motsetning til formørkelse, IntelliJ IDEA gir FernFlower dekompilatoren som standard.

For å bruke det, vi bare Ctrl + Venstreklikk på kursnavnet og se koden:

Vi kan også laste ned kilden. Nedlasting av kilden gir den faktiske koden og kommentarene.

For eksempel Komponent merknadsklasse fra skjermbildet ovenfor inkluderer Javadoc om bruk av Komponent. Vi kan merke forskjellen:

Selv om dekompilering er veldig nyttig, gir det ikke alltid et komplett bilde. Hele kildekoden gir oss et komplett bilde.

3. Kommandolinjedekompilering

Før IDE-plugins ble kommandolinjen brukt til dekompilering av klasser. Kommandolinjedekompilere kan også være nyttige for feilsøking av Java-bykode på en ekstern server som ikke er tilgjengelig med IDE eller GUI.

For eksempel kan vi dekompilere med JDCommandLine ved hjelp av en enkel jar-kommando:

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

Ikke la bort ./classes-parameteren. Den definerer utdatakatalogen.

Etter vellykket dekompilering kan vi få tilgang til kildefilene i utdatakatalogen. De er nå klare til å se gjennom en tekstredigerer som Vim.

4. Konklusjon

Vi så på dekompilering i Eclipse og IntelliJ IDEA IDEer, så vel som et kommandolinjealternativ når de ikke er tilgjengelige.

Vi så også på forskjellen mellom å koble kildekode og dekompilering.


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