Java Decompiler je posebna vrsta decompilera koji uzima klasnu datoteku kao ulaz i proizvodi Java izvorni kod kao izlaz. Dekompilacija je upravo obrnuti proces od kompilacije. Stoga dekompilator ne proizvodi repliku izvornog koda. To je zato što se dio informacija izgubio iz izvornog koda tijekom kompilacije programa.
Ali postoje mnoge složenosti, na primjer, Java kod je strukturiran, a bajt kod nije strukturiran. Štoviše, transformacija nije jedan prema jedan: dva različita Java programa mogu dati identičan bajt kod.
Dostupni su sljedeći Java dekompileri:
slučajni broj gen java
- DJ Java Decompiler
- JReversePro
- ŽIDOVI
- JD-CORE/ JD-GUI/ JD Eclipse
JAD Decompiler
JAD je aplikacija naredbenog retka. Napisan je u C++. Glavna funkcija je rastaviti .class datoteke. JAD se može implementirati s konzole i dekompilirati će Java klase u izvorni kod. Na ovaj način programeri mogu duboko zaviriti u kod Java runtime biblioteka i čak uljepšati retke, pripremajući ih za ponovnu kompilaciju. Postoji rizik od prepisivanja datoteka izvornog koda, posebno kada se koristi parametar '-o' (prebriši izlazne datoteke bez potvrde).
Primjer
Kreirajmo jednostavan Java program koji zbraja dva broja.
import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } }
Slijedite korake za pretvaranje .class u čitljiv Java izvorni kod. Ovdje koristimo JAD decompiler.
Korak 1: Preuzmite JAD alat s https://bit.ly/2XuRzT5
Korak 2: Raspakujte zip datoteku i nabavite jad.exe.
Korak 3: Napravite .java datoteku (DecompilerDemo.java) u istoj mapi u kojoj ste izdvojili zip datoteku.
Korak 4: Prevedite i pokrenite .java datoteku. Generirati će .class datoteku u odgovarajućoj mapi.
Korak 5: Sada premjestite .class datoteku i jad aplikaciju u drugu mapu.
Korak 6: Upišite naredbu: jad DecompilerDemo
Gornja naredba generira .jad datoteku u odgovarajućoj mapi.
Korak 7: Upišite naredbu: jad?s java DecompilerDemo
gimp kako poništiti odabir
Generira .java datoteku u istoj mapi.
Otvorite DecompilerDemo.java i dobit ćemo sljedeći kod:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } }
Možemo uočiti da se pisana .java datoteka razlikuje od generirane .java datoteke, ali daje isti izlaz.
Disassembler Java Class File
Naredba javap
The javap je alat Java naredbenog retka koji dolazi s JDK. Koristi se za rastavljanje datoteke klase i ispisuje čitljivu verziju te klase. Njegov učinak ovisi o korištenoj opciji. Bez korištenja bilo koje opcije, javap ispisuje paket, zaštićena i javna polja i metode klasa koje su mu proslijeđene. A javap također se koristi da saznate koje su metode dostupne za klasu ako nemate izvorni kod koji je korišten za stvaranje klase. Opći format javap naredbe je:
javap [options] filename
Mogućnosti
Uz naredbu javap dostupne su mnoge opcije. Neki od njih su:
Rastavite klasnu datoteku pomoću javap naredbe
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Generirajte datoteku klase gornjeg programa i upotrijebite sljedeću naredbu za rastavljanje datoteke klase.
javap -c -p DisassembleDemo
Izlaz
Sljedeći izlaz pokazuje što datoteka klase ima unutra.
Ali ne dobivamo Java izvorni kod pomoću naredbe javap. Dakle, postoji mnogo dostupnih dekompilatora koji pretvaraju .class datoteku u .java datoteku.