Декомпилаторът на Java е специален тип декомпилатор, който приема файл с клас като вход и произвежда изходен код на Java като изход. Декомпилирането е точно обратният процес на компилирането. По този начин декомпилаторът не създава реплика на изходния код. Това е така, защото малко информация се губи от изходния код по време на компилирането на програмата.
Но има много сложности, например Java кодът е структуриран, а байт кодът не е структуриран. Освен това, трансформацията не е едно към едно: две различни Java програми могат да дадат идентичен байт код.
Налични са следните Java декомпилатори:
java сравнява низове
- DJ Java декомпилатор
- JReversePro
- ЕВРЕИ
- JD-CORE/ JD-GUI/ JD Eclipse
Декомпилатор на JAD
JAD е приложение от командния ред. Написан е на C++. Основната функция е да разглобявате .class файловете. JAD може да се внедри от конзолата и ще декомпилира Java класовете в изходния код. По този начин разработчиците могат да надникнат дълбоко в кода на библиотеките за изпълнение на Java и дори да разкрасят редовете, подготвяйки ги за повторно компилиране. Съществува риск от презаписване на файлове с изходен код, особено когато се използва параметърът „-o“ (презаписване на изходни файлове без потвърждение).
Пример
Нека създадем проста програма на Java, която добавя две числа.
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); } }
Следвайте стъпките, за да конвертирате .class в четим изходен код на Java. Тук използваме JAD декомпилатор.
Етап 1: Изтеглете инструмента JAD от https://bit.ly/2XuRzT5
безплатен ipconfig
Стъпка 2: Разархивирайте zip файла и вземете jad.exe.
Стъпка 3: Създайте .java файл (DecompilerDemo.java) в същата папка, в която сте извлекли zip файла.
Стъпка 4: Компилирайте и стартирайте .java файла. Той ще генерира .class файл в съответната папка.
Стъпка 5: Сега преместете файла .class и приложението jad в друга папка.
Стъпка 6: Въведете командата: jad DecompilerDemo
Горната команда генерира .jad файл в съответната папка.
Стъпка 7: Въведете командата: jad ?s java DecompilerDemo
Той генерира .java файла в същата папка.
Отворете DecompilerDemo.java, получаваме следния код:
// 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()); } }
Можем да забележим, че написаният .java файл е различен от генерирания .java файл, но дава същия резултат.
Java Class File Disassembler
Команда javap
спи в javascript
The javap е инструмент за команден ред на Java, който идва с JDK. Използва се за разглобяване на файла на класа и отпечатване на четима от човека версия на този клас. Неговият резултат зависи от използваната опция. Без да използва никаква опция, javap отпечатва пакета, защитените и публичните полета и методите на предадените му класове. А javap също се използва, за да разберете кои методи са налични за клас, ако нямате изходния код, който е използван за създаване на класа. Общият формат на командата javap е:
javap [options] filename
Настроики
npm изчистване на кеша
С командата javap са налични много опции. Някои от тях са:
Разглобете класов файл с помощта на командата javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Генерирайте класовия файл на горната програма и използвайте следната команда, за да разглобите класовия файл.
javap -c -p DisassembleDemo
Изход
Следният изход показва какво съдържа файлът на класа вътре.
Но ние не получаваме изходния код на Java с помощта на командата javap. Така че има много налични декомпилатори, които конвертират .class файл в .java файл.