„Java“ dekompiliatorius yra specialus dekompiliatoriaus tipas, kuris kaip įvestį priima klasės failą ir sukuria „Java“ šaltinio kodą kaip išvestį. Dekompiliavimas yra tiksliai atvirkštinis kompiliavimo procesas. Taigi, dekompiliatorius nesukuria šaltinio kodo kopijos. Taip yra todėl, kad kompiliuojant programą iš šaltinio kodo buvo prarasta dalis informacijos.
Tačiau yra daug sudėtingumo, pavyzdžiui, „Java“ kodas yra struktūrizuotas, o baitinis kodas nėra struktūrizuotas. Be to, transformacija nėra vienas prieš vieną: dvi skirtingos Java programos gali duoti identišką baitų kodą.
Galimi šie „Java“ dekompiliatoriai:
- DJ Java Decompiler
- JReversePro
- ŽYDAI
- JD-CORE/ JD-GUI/ JD Eclipse
JAD dekompiliatorius
JAD yra komandų eilutės programa. Tai parašyta C++. Pagrindinė funkcija yra išardyti .class failus. JAD gali būti įdiegtas iš konsolės, ir jis dekompiliuos Java klases į šaltinio kodą. Tokiu būdu kūrėjai gali giliai įsigilinti į „Java“ vykdymo laiko bibliotekų kodą ir netgi pagražinti eilutes, paruošdami jas pakartotiniam kompiliavimui. Kyla šaltinio kodo failų perrašymo pavojus, ypač kai naudojamas parametras „-o“ (perrašyti išvesties failus be patvirtinimo).
Pavyzdys
Sukurkime paprastą Java programą, kuri prideda du skaičius.
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); } }
Atlikite veiksmus, kad konvertuotumėte .class į skaitomą Java šaltinio kodą. Čia mes naudojame JAD dekompiliatorių.
1 žingsnis: Atsisiųskite JAD įrankį iš https://bit.ly/2XuRzT5
2 žingsnis: Ištraukite ZIP failą ir gaukite jad.exe.
3 veiksmas: Sukurkite .java failą (DecompilerDemo.java) tame pačiame aplanke, kuriame ištraukėte ZIP failą.
4 veiksmas: Sukompiliuokite ir paleiskite .java failą. Atitinkamame aplanke bus sukurtas .class failas.
5 veiksmas: Dabar perkelkite .class failą ir programą jad į kitą aplanką.
6 veiksmas: Įveskite komandą: jad DecompilerDemo
Aukščiau pateikta komanda sugeneruoja .jad failą atitinkamame aplanke.
7 veiksmas: Įveskite komandą: jad ?s java DecompilerDemo
Tame pačiame aplanke sugeneruojamas .java failas.
Atidarę DecompilerDemo.java, gauname šį 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()); } }
Galime pastebėti, kad parašytas .java failas skiriasi nuo sugeneruoto .java failo, bet pateikia tą pačią išvestį.
Java klasės failų išardiklis
javap komanda
runas in powershell
The javap yra „Java“ komandų eilutės įrankis, pateikiamas kartu su JDK. Jis naudojamas išardyti klasės failą ir spausdinti žmonėms suprantamą tos klasės versiją. Jo išvestis priklauso nuo naudojamos parinkties. Nenaudodamas jokios parinkties, javap atspausdina jam perduotų klasių paketą, saugomus ir viešuosius laukus bei metodus. A javap Taip pat naudojamas norint sužinoti, kurie metodai galimi klasei, jei neturite šaltinio kodo, kuris buvo naudojamas kuriant klasę. Bendras javap komandos formatas yra:
javap [options] filename
Galimybės
Su javap komanda yra daug parinkčių. Kai kurie iš jų yra:
Išardykite klasės failą naudodami javap komandą
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Sugeneruokite aukščiau pateiktos programos klasės failą ir naudokite šią komandą, kad išardytumėte klasės failą.
javap -c -p DisassembleDemo
Išvestis
Ši išvestis rodo, kas yra klasės failo viduje.
Bet mes negauname Java šaltinio kodo naudodami javap komandą. Taigi yra daug dekompiliatorių, kurie konvertuoja .class failą į .java failą.