Java Decompiler je speciální typ dekompilátoru, který přijímá soubor třídy jako vstup a vytváří zdrojový kód Java jako výstup. Dekompilace je přesně opačný proces kompilace. Dekompilátor tedy nevytváří repliku zdrojového kódu. Je to proto, že se během kompilace programu ztratila část informací ze zdrojového kódu.
Existuje však mnoho složitostí, například kód Java je strukturovaný a bajtový kód strukturovaný není. Transformace navíc není jedna ku jedné: dva různé programy Java mohou poskytnout identický bajtový kód.
K dispozici jsou následující dekompilátory Java:
jak odstranit sloupec v postgresql
- DJ Java Decompiler
- JReversePro
- ŽIDÉ
- JD-CORE/ JD-GUI/ JD Eclipse
Dekompilátor JAD
JAD je aplikace příkazového řádku. Je napsán v C++. Hlavní funkcí je rozebrat soubory .class. JAD lze nasadit z konzole a dekompiluje třídy Java do zdrojového kódu. Tímto způsobem mohou vývojáři nahlédnout hluboko do kódu Java runtime knihoven a dokonce zkrášlit řádky a připravit je na rekompilaci. Existuje riziko přepsání souborů zdrojového kódu, zejména při použití parametru '-o' (přepsat výstupní soubory bez potvrzení).
Příklad
Vytvořme jednoduchý Java program, který přidá dvě čísla.
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); } }
Postupujte podle kroků pro převod .class na čitelný zdrojový kód Java. Zde používáme dekompilátor JAD.
Krok 1: Stáhněte si nástroj JAD z https://bit.ly/2XuRzT5
Krok 2: Rozbalte soubor zip a získejte jad.exe.
Krok 3: Vytvořte soubor .java (DecompilerDemo.java) ve stejné složce, do které jste extrahovali soubor zip.
Krok 4: Zkompilujte a spusťte soubor .java. V příslušné složce vygeneruje soubor .class.
Krok 5: Nyní přesuňte soubor .class a aplikaci jad do jiné složky.
Krok 6: Zadejte příkaz: jad Decompiler Demo
Výše uvedený příkaz vygeneruje soubor .jad v příslušné složce.
Krok 7: Zadejte příkaz: jad ?s java DecompilerDemo
Vygeneruje soubor .java ve stejné složce.
Otevřete soubor DecompilerDemo.java a získáme následující kód:
// 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()); } }
Můžeme pozorovat, že zapsaný .java soubor se liší od generovaného .java souboru, ale dává stejný výstup.
Java Class File Disassembler
příkaz javap
The javap je nástroj příkazového řádku Java, který je dodáván s JDK. Používá se k rozebrání souboru třídy a vytiskne lidsky čitelnou verzi této třídy. Jeho výstup závisí na použité možnosti. Bez použití jakékoli volby vytiskne javap balíček, chráněná a veřejná pole a metody tříd, které mu byly předány. A javap se také používá ke zjištění, které metody jsou dostupné pro třídu, pokud nemáte zdrojový kód, který byl použit k vytvoření třídy. Obecný formát příkazu javap je:
javap [options] filename
Možnosti
S příkazem javap je k dispozici mnoho možností. Někteří z nich jsou:
Rozložte soubor třídy pomocí příkazu javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Vygenerujte soubor třídy výše uvedeného programu a použijte následující příkaz k rozebrání souboru třídy.
javap -c -p DisassembleDemo
Výstup
Následující výstup ukazuje, co obsahuje soubor třídy.
Ale nezískáme zdrojový kód Java pomocí příkazu javap. Existuje tedy mnoho dostupných dekompilátorů, které převádějí soubor .class na soubor .java.