En Java Decompiler er en speciel type decompiler, som tager en klassefil som input og producerer Java-kildekode som output. Dekompileringen er nøjagtig den omvendte proces af kompilering. Decompiler producerer således ikke en replika af kildekoden. Det skyldes, at en smule information går tabt fra kildekoden under kompileringen af programmet.
Men der er mange kompleksiteter, for eksempel er Java-kode struktureret, og byte-kode er ikke struktureret. Desuden er transformationen ikke én til én: to forskellige Java-programmer kan give identisk bytekode.
java sagsfremstilling
Der er følgende Java-decompilere tilgængelige:
- DJ Java Decompiler
- JReversePro
- JØDER
- JD-CORE/ JD-GUI/ JD Eclipse
JAD Decompiler
JAD er et kommandolinjeprogram. Det er skrevet i C++. Hovedfunktionen er at adskille .class filerne. JAD kan implementeres fra konsollen, og det vil dekompilere Java-klasser i kildekoden. På denne måde kan udviklere se dybt ind i koden for Java runtime-biblioteker og endda forskønne linjerne og forberede dem til en genkompilering. Der er risiko for overskrivning af kildekodefiler, især når parameteren '-o' (overskriv outputfiler uden bekræftelse) bruges.
Eksempel
Lad os skabe et simpelt Java-program, som tilføjer to tal.
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); } }
Følg trinene for at konvertere .class til læsbar Java-kildekode. Her bruger vi JAD decompiler.
Trin 1: Download JAD-værktøj fra https://bit.ly/2XuRzT5
int til streng i java
Trin 2: Udpak zip-filen og få jad.exe.
Trin 3: Opret en .java-fil (DecompilerDemo.java) i den samme mappe, som du har pakket zip-filen ud.
Trin 4: Kompiler og kør .java-filen. Det vil generere en .class-fil i den respektive mappe.
Trin 5: Flyt nu .class-filen og jad-applikationen til en anden mappe.
Trin 6: Skriv kommandoen: jad DecompilerDemo
Ovenstående kommando genererer en .jad-fil i den respektive mappe.
Trin 7: Skriv kommandoen: jad ?s java DecompilerDemo
Den genererer .java-filen i samme mappe.
Åbn DecompilerDemo.java, vi får følgende kode:
// 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()); } }
Vi kan observere, at den skrevne .java-fil er forskellig fra den genererede .java-fil, men giver det samme output.
Java Class File Disassembler
hvordan finder jeg skjulte apps på Android
javap kommando
Det javap er et Java-kommandolinjeværktøj, der følger med JDK. Den bruges til at adskille klassefilen og udskriver en menneskelæselig version af den klasse. Dens output afhænger af den anvendte mulighed. Uden at bruge nogen valgmulighed, udskriver javap pakken, beskyttede og offentlige felter og metoder for de klasser, der sendes til den. EN javap bruges også til at finde ud af, hvilke metoder der er tilgængelige for en klasse, hvis du ikke har den kildekode, der blev brugt til at oprette klassen. Det generelle format for javap-kommando er:
javap [options] filename
Muligheder
Med javap-kommandoen er mange muligheder tilgængelige. Nogle af dem er:
Adskil en klassefil ved hjælp af javap-kommandoen
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Generer klassefilen for ovenstående program og brug følgende kommando til at adskille klassefilen.
python gem json til fil
javap -c -p DisassembleDemo
Produktion
Følgende output viser, hvad klassefilen har inde.
Men vi får ikke Java-kildekoden ved at bruge javap-kommandoen. Så der er mange tilgængelige decompilere, som konverterer en .class-fil til en .java-fil.