Java Decompiler je špeciálny typ dekompilátora, ktorý berie súbor triedy ako vstup a vytvára zdrojový kód Java ako výstup. Dekompilácia je presne opačný proces kompilácie. Dekompilátor teda nevytvára repliku zdrojového kódu. Je to preto, že počas kompilácie programu sa zo zdrojového kódu stratila časť informácií.
Existuje však veľa zložitostí, napríklad kód Java je štruktúrovaný a bajtový kód nie je štruktúrovaný. Navyše, transformácia nie je jedna k jednej: dva rôzne programy Java môžu poskytnúť rovnaký bajtový kód.
K dispozícii sú nasledujúce dekompilátory Java:
- DJ Java Decompiler
- JReversePro
- ŽIDOVIA
- JD-CORE/ JD-GUI/ JD Eclipse
Dekompilátor JAD
JAD je aplikácia príkazového riadku. Je napísaný v C++. Hlavnou funkciou je rozobrať súbory .class. JAD je možné nasadiť z konzoly a dekompiluje triedy Java do zdrojového kódu. Týmto spôsobom môžu vývojári nahliadnuť hlboko do kódu Java runtime knižníc a dokonca skrášliť riadky a pripraviť ich na rekompiláciu. Existuje riziko prepísania súborov zdrojového kódu, najmä pri použití parametra '-o' (prepísanie výstupných súborov bez potvrdenia).
pvr plná forma
Príklad
Vytvorme jednoduchý Java program, ktorý pridá dve čí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 podľa krokov na konverziu .class na čitateľný zdrojový kód Java. Tu používame dekompilátor JAD.
Krok 1: Stiahnite si nástroj JAD z https://bit.ly/2XuRzT5
Krok 2: Rozbaľte súbor zip a získajte súbor jad.exe.
Krok 3: Vytvorte súbor .java (DecompilerDemo.java) v rovnakom priečinku, do ktorého ste rozbalili súbor zip.
Krok 4: Kompilujte a spustite súbor .java. V príslušnom priečinku vygeneruje súbor .class.
Krok 5: Teraz presuňte súbor .class a aplikáciu jad do iného priečinka.
Krok 6: Zadajte príkaz: jad Decompiler Demo
Vyššie uvedený príkaz vygeneruje súbor .jad v príslušnom priečinku.
Krok 7: Zadajte príkaz: jad ?s java DecompilerDemo
Vygeneruje súbor .java v rovnakom priečinku.
Otvorte súbor DecompilerDemo.java a získame nasledujúci 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 pozorovať, že napísaný .java súbor sa líši od vygenerovaného .java súboru, ale dáva rovnaký výstup.
tenký algoritmus
Java Class File Disassembler
príkaz javap
The javap je nástroj príkazového riadka Java, ktorý sa dodáva s JDK. Používa sa na rozobratie súboru triedy a vytlačí ľudsky čitateľnú verziu tejto triedy. Jeho výstup závisí od použitej možnosti. Bez použitia akejkoľvek voľby, javap vytlačí balík, chránené a verejné polia a metódy tried, ktoré mu boli odovzdané. A javap sa tiež používa na zistenie, ktoré metódy sú dostupné pre triedu, ak nemáte zdrojový kód, ktorý bol použitý na vytvorenie triedy. Všeobecný formát príkazu javap je:
inicializovať zoznam python
javap [options] filename
možnosti
Pomocou príkazu javap je dostupných veľa možností. Niektoré z nich sú:
Rozložte súbor triedy pomocou príkazu javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Vygenerujte súbor triedy vyššie uvedeného programu a pomocou nasledujúceho príkazu rozoberte súbor triedy.
javap -c -p DisassembleDemo
Výkon
Nasledujúci výstup ukazuje, čo obsahuje súbor triedy.
Ale nezískame zdrojový kód Java pomocou príkazu javap. Existuje teda veľa dostupných dekompilátorov, ktoré konvertujú súbor .class na súbor .java.