Java Decompiler on erityinen purkuohjelma, joka ottaa luokkatiedoston syötteenä ja tuottaa Java-lähdekoodin ulostulona. Purkaminen on täsmälleen käänteinen käännösprosessi. Näin ollen kääntäjä ei tuota kopiota lähdekoodista. Tämä johtuu siitä, että lähdekoodista on kadonnut vähän tietoa ohjelman kääntämisen aikana.
Mutta on monia monimutkaisia, esimerkiksi Java-koodi on strukturoitu, ja tavukoodi ei ole jäsennelty. Lisäksi muunnos ei ole yksi yhteen: kaksi eri Java-ohjelmaa voivat tuottaa identtisen tavukoodin.
Saatavilla on seuraavat Java-kääntäjät:
- DJ Java Decompiler
- JReversePro
- JUUTALAISET
- JD-CORE/ JD-GUI/ JD Eclipse
JAD Decompiler
JAD on komentorivisovellus. Se on kirjoitettu C++:lla. Päätoiminto on .class-tiedostojen purkaminen. JAD voidaan ottaa käyttöön konsolista, ja se purkaa Java-luokat lähdekoodiksi. Tällä tavalla kehittäjät voivat tarkastella syvälle Java-ajonaikaisten kirjastojen koodia ja jopa kaunistaa rivejä valmistaen ne uudelleenkääntämistä varten. Lähdekooditiedostojen päällekirjoitusriski on olemassa, varsinkin kun käytetään parametria '-o' (korvaa tulostetiedostot ilman vahvistusta).
Esimerkki
Luodaan yksinkertainen Java-ohjelma, joka lisää kaksi numeroa.
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); } }
Noudata ohjeita muuntaaksesi .class luettavaksi Java-lähdekoodiksi. Tässä käytämme JAD-dekäännösohjelmaa.
Vaihe 1: Lataa JAD-työkalu osoitteesta https://bit.ly/2XuRzT5
Vaihe 2: Pura zip-tiedosto ja hanki jad.exe.
Vaihe 3: Luo .java-tiedosto (DecompilerDemo.java) samaan kansioon, johon olet purkanut zip-tiedoston.
Vaihe 4: Käännä ja suorita .java-tiedosto. Se luo .class-tiedoston vastaavaan kansioon.
Vaihe 5: Siirrä nyt .class-tiedosto ja jad-sovellus toiseen kansioon.
taulukot java
Vaihe 6: Kirjoita komento: jad DecompilerDemo
Yllä oleva komento luo .jad-tiedoston vastaavaan kansioon.
Vaihe 7: Kirjoita komento: jad ?s java DecompilerDemo
gimp kuinka valinta poistetaan
Se luo .java-tiedoston samaan kansioon.
Avaa DecompilerDemo.java, saamme seuraavan koodin:
// 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()); } }
Voimme havaita, että kirjoitettu .java-tiedosto eroaa luodusta .java-tiedostosta, mutta antaa saman tulosteen.
Java Class File Disassembler
javap-komento
The javap on Java-komentorivityökalu, joka tulee JDK:n mukana. Sitä käytetään luokkatiedoston purkamiseen ja se tulostaa ihmisen luettavan version kyseisestä luokasta. Sen teho riippuu käytetystä vaihtoehdosta. Käyttämättä mitään vaihtoehtoa, javap tulostaa sille välitettyjen luokkien paketin, suojatut ja julkiset kentät ja menetelmät. A javap käytetään myös selvittämään, mitkä menetelmät ovat käytettävissä luokassa, jos sinulla ei ole luokan luomiseen käytettyä lähdekoodia. Javap-komennon yleinen muoto on:
javap [options] filename
Vaihtoehdot
Javap-komennolla on monia vaihtoehtoja. Jotkut niistä ovat:
Pura luokkatiedosto javap-komennolla
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Luo yllä olevan ohjelman luokkatiedosto ja pura luokkatiedosto seuraavalla komennolla.
javap -c -p DisassembleDemo
Lähtö
Seuraava tulos näyttää, mitä luokkatiedostossa on.
Emme kuitenkaan saa Java-lähdekoodia käyttämällä javap-komentoa. Joten saatavilla on monia purkuohjelmia, jotka muuntavat .class-tiedoston .java-tiedostoksi.