Osztályok dekompilálása Java-ban

1. Bemutatkozás

Ebben az oktatóanyagban a Java osztályok dekompilálását tárgyaljuk. Ha a forráskód nem érhető el, a Java osztályok dekompilálása segít a hibakeresésben és a forráskód viselkedésének megértésében.

Vessünk egy pillantást a rendelkezésre álló különböző lehetőségekre.

2. Dekompilálás IDE-ben

Mivel a legtöbb fejlesztés integrált fejlesztői környezetben történik (IDE), van értelme, hogy a dekompilálásra egy IDE-ben is sor kerüljön.

Ha további információra kíváncsi az IDE-kről, amelyekkel együttműködni fogunk, olvassa el az Eclipse hibakeresését és az IntelliJ IDEA konfigurálását bemutató cikkünket.

2.1. Fogyatkozás

Először is, az Eclipse-ben szükségünk van egy beépülő modulra, mint például az Enhanced Class Decompiler (ECD). Ez a bővítmény öt különböző dekompilert használ. Telepíthetjük az Eclipse piactérről, majd újra kell indítanunk az Eclipse alkalmazást.

Ezután az ECD-nek kis mennyiségű beállításra van szüksége az osztályfájlok társításához a Class Decompiler Viewer programmal:

Emellett társítanunk kell a.osztály forrás nélkül ”fájlok:

Végül a visszafejtőt használhatjuk a megnyomásával Ctrl + bal egérgombbal rajta osztály név. A fájl fülön zárójelben látjuk a dekompilert.

Ebben a példában a FernFlower-t használjuk:

2.2. IntelliJ ÖTLET

Az Eclipse-vel ellentétben Az IntelliJ IDEA alapértelmezés szerint a FernFlower dekompilátort biztosítja.

Használatához egyszerűen Ctrl + bal egérgombbal az osztály nevén, és tekintse meg a kódot:

Ezenkívül letölthetjük a forrást. A forrás letöltésével megkapja a tényleges kódot és megjegyzéseket.

Például a Összetevő a fenti képernyőkép kommentálási osztálya tartalmaz Javadoc-ot a Összetevő. Észrevehetjük a különbséget:

Bár a dekompilálás nagyon hasznos, nem mindig ad teljes képet. A teljes forráskód teljes képet ad.

3. Parancssor dekompilálása

Az IDE bővítmények előtt a parancssort használták az osztályok dekompilálására. A parancssori dekompilátorok szintén hasznosak lehetnek a Java bytecode hibakeresésében egy távoli kiszolgálón, amely nem érhető el IDE vagy GUI segítségével.

Például egy egyszerű jar paranccsal dekompilálhatunk a JDCommandLine segítségével:

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

Ne hagyja ki a ./classes paramétert. Meghatározza a kimeneti könyvtárat.

Sikeres dekompilálás után hozzáférhetünk a kimeneti könyvtárban található forrásfájlokhoz. Most már készen állnak a megtekintésre egy olyan szövegszerkesztőn keresztül, mint a Vim.

4. Következtetés

Megvizsgáltuk az Eclipse és az IntelliJ IDEA IDE dekompilálását, valamint egy parancssori opciót, ha ezek nem állnak rendelkezésre.

Megvizsgáltuk a különbséget a forráskód összekapcsolása és a dekompilálás között is.