Java Derleyicisi, bir sınıf dosyasını girdi olarak alan ve çıktı olarak Java kaynak kodunu üreten özel bir derleyici türüdür. Kaynak koda dönüştürme, derleme işleminin tam tersidir. Bu nedenle, kod çözücü kaynak kodun bir kopyasını üretmez. Bunun nedeni programın derlenmesi sırasında kaynak kodundan bir miktar bilginin kaybolmasıdır.
Ancak pek çok karmaşıklık vardır; örneğin Java kodu yapılandırılmıştır ve bayt kodu yapılandırılmamıştır. Üstelik dönüşüm bire bir değildir: iki farklı Java programı aynı bayt kodunu verebilir.
java dizeleri
Aşağıdaki Java kod çözücüler mevcuttur:
- DJ Java Derleyicisi
- JReversePro
- YAHUDİLER
- JD-CORE/ JD-GUI/ JD Eclipse
JAD Derleyicisi
JAD bir komut satırı uygulamasıdır. C++ ile yazılmıştır. Ana işlev .class dosyalarını parçalara ayırmaktır. JAD konsoldan dağıtılabilir ve Java sınıflarını kaynak koduna dönüştürür. Bu şekilde geliştiriciler, Java çalışma zamanı kitaplıklarının kodlarına derinlemesine bakabilir ve hatta satırları güzelleştirerek onları yeniden derlemeye hazırlayabilir. Özellikle '-o' (onay olmadan çıktı dosyalarının üzerine yaz) parametresi kullanıldığında kaynak kod dosyalarının üzerine yazılma riski vardır.
Örnek
İki sayıyı toplayan basit bir Java programı oluşturalım.
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 dosyasını okunabilir Java kaynak koduna dönüştürmek için adımları izleyin. Burada JAD kod çözücüyü kullanıyoruz.
Aşama 1: JAD aracını şuradan indirin: https://bit.ly/2XuRzT5
Java dizi listesi sıralandı
Adım 2: Zip dosyasını çıkartın ve jad.exe'yi edinin.
Aşama 3: Zip dosyasını çıkardığınız klasörde bir .java dosyası (DecompilerDemo.java) oluşturun.
Adım 4: .Java dosyasını derleyin ve çalıştırın. İlgili klasörde bir .class dosyası oluşturacaktır.
Adım 5: Şimdi .class dosyasını ve jad uygulamasını başka bir klasöre taşıyın.
Adım 6: Komutu yazın: jad DecompilerDemo
Yukarıdaki komut, ilgili klasörde bir .jad dosyası oluşturur.
Adım 7: Komutu yazın: jad'ın java DecompilerDemo'su
Aynı klasörde .Java dosyasını oluşturur.
DecompilerDemo.java'yı açın, aşağıdaki kodu elde ederiz:
// 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()); } }
Yazılan .java dosyasının, oluşturulan .java dosyasından farklı olduğunu ancak aynı çıktıyı verdiğini görebiliriz.
Java Sınıfı Dosya Ayırıcı
c++ dizesinde bul
javap Komutu
javap JDK ile birlikte gelen bir Java komut satırı aracıdır. Sınıf dosyasını parçalara ayırmak ve o sınıfın insan tarafından okunabilir bir versiyonunu yazdırmak için kullanılır. Çıktısı kullanılan seçeneğe bağlıdır. Javap herhangi bir seçenek kullanmadan kendisine iletilen sınıfların paketini, korumalı ve ortak alanlarını ve yöntemlerini yazdırır. A javap sınıfı oluşturmak için kullanılan kaynak kodunuz yoksa, bir sınıf için hangi yöntemlerin mevcut olduğunu bulmak için de kullanılır. Javap komutunun genel formatı şöyledir:
javap [options] filename
Seçenekler
Javap komutu ile birçok seçenek mevcuttur. Onlardan bazıları:
Javap komutunu kullanarak bir sınıf dosyasını parçalara ayırın
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Yukarıdaki programın sınıf dosyasını oluşturun ve sınıf dosyasını sökmek için aşağıdaki komutu kullanın.
uzman sistemler
javap -c -p DisassembleDemo
Çıktı
Aşağıdaki çıktı, sınıf dosyasının içinde ne olduğunu gösterir.
Ancak javap komutunu kullanarak Java kaynak kodunu alamıyoruz. Dolayısıyla, bir .class dosyasını bir .java dosyasına dönüştüren birçok kod çözücü mevcuttur.