Dekompilator Java to specjalny typ dekompilatora, który pobiera plik klasy jako dane wejściowe i generuje kod źródłowy Java jako dane wyjściowe. Dekompilacja jest dokładnie odwrotnym procesem kompilacji. Dlatego dekompilator nie tworzy repliki kodu źródłowego. Dzieje się tak dlatego, że podczas kompilacji programu utracono część informacji z kodu źródłowego.
Istnieje jednak wiele zawiłości, na przykład kod Java ma strukturę, a kod bajtowy nie ma struktury. Co więcej, transformacja nie jest jeden do jednego: dwa różne programy Java mogą dać identyczny kod bajtowy.
Dostępne są następujące dekompilatory Java:
- Dekompilator Java dla DJ-a
- JReversePro
- ŻYDZI
- JD-CORE/JD-GUI/JD Eclipse
Dekompilator JAD
JAD jest aplikacją uruchamianą z wiersza poleceń. Jest napisany w C++. Główną funkcją jest deasemblacja plików .class. JAD można wdrożyć z konsoli i będzie on dekompilował klasy Java do kodu źródłowego. W ten sposób programiści mogą zajrzeć głęboko w kod bibliotek wykonawczych Java, a nawet upiększyć linie, przygotowując je do rekompilacji. Istnieje ryzyko nadpisania plików kodu źródłowego, szczególnie w przypadku użycia parametru „-o” (nadpisanie plików wyjściowych bez potwierdzenia).
Przykład
Stwórzmy prosty program w Javie, który dodaje dwie liczby.
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); } }
Postępuj zgodnie z instrukcjami, aby przekonwertować plik .class na czytelny kod źródłowy Java. Tutaj używamy dekompilatora JAD.
Krok 1: Pobierz narzędzie JAD z https://bit.ly/2XuRzT5
Wartość ciągu Java
Krok 2: Wyodrębnij plik zip i pobierz plik jad.exe.
Krok 3: Utwórz plik .java (DecompilerDemo.java) w tym samym folderze, w którym rozpakowałeś plik ZIP.
Krok 4: Skompiluj i uruchom plik .java. Wygeneruje plik .class w odpowiednim folderze.
Krok 5: Teraz przenieś plik .class i aplikację jad do innego folderu.
Krok 6: Wpisz polecenie: jad DecompilerDemo
Powyższe polecenie generuje plik .jad w odpowiednim folderze.
Krok 7: Wpisz polecenie: jad ?s Java DecompilerDemo
Generuje plik .java w tym samym folderze.
Otwórz plik DecompilerDemo.java, otrzymamy następujący 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()); } }
Możemy zauważyć, że zapisany plik .java różni się od wygenerowanego pliku .java, ale daje taki sam wynik.
jeśli inaczej, jeśli inaczej, jeśli Java
Dezasembler plików klas Java
Komenda javapa
The javap to narzędzie wiersza poleceń Java dostarczane z pakietem JDK. Służy do deasemblacji pliku klasy i wypisywania czytelnej dla człowieka wersji tej klasy. Jego wynik zależy od użytej opcji. Nie używając żadnej opcji, javap wypisuje pakiet, pola chronione i publiczne oraz metody przekazanych mu klas. A javap służy również do sprawdzenia, które metody są dostępne dla klasy, jeśli nie masz kodu źródłowego użytego do utworzenia klasy. Ogólny format polecenia javap to:
javap [options] filename
Opcje
Dzięki poleceniu javap dostępnych jest wiele opcji. Niektórzy z nich są:
Zdemontuj plik klasy za pomocą polecenia javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Wygeneruj plik klasy powyższego programu i użyj następującego polecenia, aby zdeasemblować plik klasy.
ddl kontra dml
javap -c -p DisassembleDemo
Wyjście
Poniższe dane wyjściowe pokazują, co zawiera plik klasy.
Ale nie otrzymujemy kodu źródłowego Java za pomocą polecenia javap. Dlatego dostępnych jest wiele dekompilatorów, które konwertują plik .class na plik .java.