Java dekompilators ir īpaša veida dekompilators, kas kā ievadi izmanto klases failu un kā izvadi rada Java avota kodu. Dekompilācija ir tieši apgrieztais kompilācijas process. Tādējādi dekompilators nerada avota koda kopiju. Tas ir tāpēc, ka programmas kompilēšanas laikā no avota koda tika zaudēta daļa informācijas.
Bet ir daudz sarežģījumu, piemēram, Java kods ir strukturēts, un baitu kods nav strukturēts. Turklāt transformācija nav viens pret vienu: divas dažādas Java programmas var iegūt identisku baitu kodu.
Ir pieejami šādi Java dekompilatori:
- DJ Java dekompilators
- JReversePro
- EBREJI
- JD-CORE/ JD-GUI/ JD Eclipse
JAD dekompilators
JAD ir komandrindas lietojumprogramma. Tas ir rakstīts C++ valodā. Galvenā funkcija ir .class failu izjaukšana. JAD var izvietot no konsoles, un tas dekompilēs Java klases avota kodā. Tādā veidā izstrādātāji var dziļi izpētīt Java izpildlaika bibliotēku kodu un pat izdaiļot rindas, sagatavojot tās atkārtotai kompilācijai. Pastāv avota koda failu pārrakstīšanas risks, īpaši, ja tiek izmantots parametrs '-o' (pārrakstīt izvades failus bez apstiprinājuma).
Piemērs
iegūstiet masīva garumu c
Izveidosim vienkāršu Java programmu, kas pievieno divus skaitļus.
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); } }
Izpildiet darbības, lai pārveidotu .class par lasāmu Java avota kodu. Šeit mēs izmantojam JAD dekompilatoru.
1. darbība: Lejupielādējiet JAD rīku no https://bit.ly/2XuRzT5
2. darbība: Izvelciet zip failu un iegūstiet jad.exe.
3. darbība: Izveidojiet .java failu (DecompilerDemo.java) tajā pašā mapē, kurā esat izvilcis zip failu.
4. darbība: Kompilējiet un palaidiet .java failu. Tas ģenerēs .class failu attiecīgajā mapē.
5. darbība: Tagad pārvietojiet .class failu un lietojumprogrammu jad uz citu mapi.
6. darbība: Ierakstiet komandu: jad DecompilerDemo
Iepriekš minētā komanda ģenerē .jad failu attiecīgajā mapē.
7. darbība: Ierakstiet komandu: jad ?s java DecompilerDemo
bezmaksas ipconfig
Tas ģenerē .java failu tajā pašā mapē.
Atverot DecompilerDemo.java, mēs saņemam šādu kodu:
// 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()); } }
Varam novērot, ka uzrakstītais .java fails atšķiras no ģenerētā .java faila, taču sniedz tādu pašu izvadi.
Java klases failu izjaukšanas programma
javap komanda
The javap ir Java komandrindas rīks, kas tiek piegādāts kopā ar JDK. To izmanto, lai izjauktu klases failu un izdrukātu šīs klases cilvēkiem lasāmu versiju. Tās izvade ir atkarīga no izmantotās opcijas. Neizmantojot nevienu opciju, javap izdrukā tam nodoto klašu pakotni, aizsargātos un publiskos laukus un metodes. A javap tiek izmantots arī, lai noskaidrotu, kuras metodes ir pieejamas klasei, ja jums nav avota koda, kas tika izmantots klases izveidei. Javap komandas vispārējais formāts ir:
javap [options] filename
Iespējas
Izmantojot javap komandu, ir pieejamas daudzas iespējas. Daži no tiem ir:
Izjauciet klases failu, izmantojot javap komandu
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Ģenerējiet iepriekš minētās programmas klases failu un izmantojiet šo komandu, lai izjauktu klases failu.
javap -c -p DisassembleDemo
Izvade
Šī izvade parāda, kas ir klases failā.
Bet mēs neiegūstam Java avota kodu, izmantojot javap komandu. Tāpēc ir pieejami daudzi dekompilatori, kas konvertē .class failu par .java failu.