Java デコンパイラは、クラス ファイルを入力として受け取り、Java ソース コードを出力として生成する特殊なタイプの逆コンパイラです。逆コンパイルは、コンパイルの逆のプロセスです。したがって、逆コンパイラはソース コードのレプリカを生成しません。これは、プログラムのコンパイル中にソース コードから少しの情報が失われるためです。
ただし、Java コードは構造化されていますが、バイト コードは構造化されていないなど、多くの複雑さがあります。さらに、変換は 1 対 1 ではありません。2 つの異なる Java プログラムが同一のバイト コードを生成する場合があります。
Java文字列を連結する
次の Java デコンパイラが利用可能です。
- DJ Java デコンパイラ
- JRリバースプロ
- ユダヤ人
- JD-CORE/JD-GUI/JD Eclipse
JAD逆コンパイラ
JAD はコマンドライン アプリケーションです。 C++ で書かれています。主な機能は、.class ファイルを逆アセンブルすることです。 JAD はコンソールからデプロイでき、Java クラスをソース コードに逆コンパイルします。このようにして、開発者は Java ランタイム ライブラリのコードを深く調べ、行を美しくして再コンパイルの準備をすることもできます。特に「-o」(確認せずに出力ファイルを上書きする) パラメータが使用されている場合、ソース コード ファイルが上書きされる危険があります。
例
2 つの数値を加算する簡単な 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
Java文字列cmp
ステップ2: zip ファイルを解凍し、jad.exe を入手します。
ステップ 3: zip ファイルを解凍したのと同じフォルダーに .java ファイル (DecompilerDemo.java) を作成します。
ステップ 4: .java ファイルをコンパイルして実行します。それぞれのフォルダーに .class ファイルが生成されます。
ステップ5: 次に、.class ファイルと jad アプリケーションを別のフォルダーに移動します。
ステップ6: 次のコマンドを入力します。 jad デコンパイラデモ
上記のコマンドにより、それぞれのフォルダーに .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クラスファイル逆アセンブラ
常にVerilog
javapコマンド
の ジャバップ は、JDK に付属する Java コマンド ライン ツールです。これは、クラス ファイルを逆アセンブルし、そのクラスの人が読めるバージョンを出力するために使用されます。その出力は、使用されるオプションによって異なります。オプションを使用せずに、javap は、渡されたクラスのパッケージ、保護フィールドおよびパブリックフィールド、およびメソッドを出力します。あ ジャバップ また、クラスの作成に使用したソース コードがない場合に、そのクラスで使用できるメソッドを確認するためにも使用されます。 javap コマンドの一般的な形式は次のとおりです。
javap [options] filename
オプション
javap コマンドでは、多くのオプションが利用可能です。そのうちのいくつかは次のとおりです。
javapコマンドを使用してクラスファイルを逆アセンブルする
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
上記プログラムのクラスファイルを生成し、以下のコマンドでクラスファイルを逆アセンブルします。
javap -c -p DisassembleDemo
出力
Javaの文字列で
次の出力は、クラス ファイルの内容を示しています。
ただし、javap コマンドを使用して Java ソース コードを取得することはできません。そのため、.class ファイルを .java ファイルに変換する逆コンパイラが数多く存在します。