Dekompiliranje nastave u Javi

1. Uvod

U ovom uputstvu razgovarat ćemo o dekompiliranju Java klasa. Kada izvorni kod nije dostupan, dekompiliranje Java klasa pomaže u uklanjanju pogrešaka i razumijevanju ponašanja izvornog koda.

Pogledajmo različite dostupne opcije.

2. Dekompiliranje u IDE-u

Budući da se većina razvoja vrši u integriranom razvojnom okruženju (IDE), logično je da bi se i dekompilacija trebala odvijati u IDE-u.

Za više informacija o IDE-ima s kojima ćemo surađivati, pogledajte naše članke o otklanjanju pogrešaka u Eclipseu i konfiguraciji za IntelliJ IDEA.

2.1. Zasjeniti

Prvo, u Eclipseu nam je potreban dodatak kao što je Enhanced Class Decompiler (ECD). Ovaj dodatak koristi pet različitih dekompilatora. Možemo ga instalirati s Eclipse Marketplace, a zatim moramo ponovno pokrenuti Eclipse.

Dalje, ECD zahtijeva malu količinu postavki za pridruživanje datoteka klase s preglednikom Class Decompiler Viewer:

Također, moramo povezati “.razred bez izvornih ”datoteka:

Napokon, možemo koristiti dekompilator pritiskom Ctrl + lijevi klik na a razred Ime. U zagradama vidimo dekompilator koji se koristi na kartici datoteke.

U ovom primjeru koristimo FernFlower:

2.2. IntelliJ IDEA

Za razliku od Eclipsea, IntelliJ IDEA nudi zadani dekompilator FernFlower.

Da bismo ga koristili, mi jednostavno Ctrl + lijevi klik na nazivu klase i pogledajte kod:

Također, izvor možemo preuzeti. Preuzimanje izvora pružit će stvarni kod i komentare.

Na primjer, Komponenta klasa napomena s gornjeg snimka zaslona uključuje Javadoc o korištenju Komponenta. Možemo primijetiti razliku:

Iako je dekompilacija vrlo korisna, ne daje uvijek cjelovitu sliku. Potpuni izvorni kod daje nam cjelovitu sliku.

3. Dekompiliranje naredbenog retka

Prije IDE dodataka, naredbeni redak koristio se za dekompiliranje klasa. Dekompilatori naredbenog retka mogu biti korisni i za otklanjanje pogrešaka u Java bajt kodu na udaljenom poslužitelju kojem nije dostupan IDE ili GUI.

Na primjer, možemo dekompilirati s JDCommandLine pomoću jednostavne naredbe jar:

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

Ne izostavljajte parametar ./classes. Definira izlazni direktorij.

Nakon uspješne dekompilacije možemo pristupiti izvornim datotekama koje se nalaze u izlaznom direktoriju. Sada su spremni za pregled kroz uređivač teksta poput Vima.

4. Zaključak

Pregledali smo dekompilaciju u Eclipseu i IntelliJ IDEA IDE-ima, kao i opciju naredbenog retka kada nisu dostupni.

Također smo pogledali razliku između povezivanja izvornog koda i dekompilacije.