Javaのデコンパイラー(逆コンパイラー)とは
Javaのデコンパイラー(Java Decompiler)とは、Javaのclassファイルを逆コンパイルし、バイトコードからJavaのコードに変換するためのツールです。
classファイルはあるけど、ソースコードがないときや暗黙的に生成される要素(デフォルトコンストラクター)などを確認するときに、既存のclassファイルをデコンパイル(逆コンパイル)することで、ソースコードを確認できます。
インストール
デコンパイルを行う為にはJadを使用します。
(Jadは、Javaのクラスファイルを逆コンパイルし、ソースコードを生成します。)
Jadをダウンロードします。
https://varaneckas.com/jad/
ダウンロードしたファイルを適当な場所へ配置すれば完了です。配置したディレクトリへパスを通しておきましょう。
(以下、Windows 環境で、パスが通っているものとします。)
デコンパイル(逆コンパイル)
以下のSample.javaをコンパイルしたSample.Javaを逆コンパイルしてみましょう。
Sample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.*; public class Sample{ public static void main(String[] args){ ArrayList array = new ArrayList(); array.add("Hello1"); array.add("Hello2"); array.add("Hello3"); array.add("Hello4"); for(Object obj: array){ System.out.println((String)obj); } } } |
>javac Sample.java
>jad Sample.class
逆コンパイルされたソースコードSample.jad が生成されます。
Sample.jad
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
// 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: Sample.java import java.io.PrintStream; import java.util.ArrayList; import java.util.Iterator; public class Sample { public Sample() { } public static void main(String args[]) { ArrayList arraylist = new ArrayList(); arraylist.add("Hello1"); arraylist.add("Hello2"); arraylist.add("Hello3"); arraylist.add("Hello4"); Object obj; for(Iterator iterator = arraylist.iterator(); iterator.hasNext(); System.out.println((String)obj)) obj = iterator.next(); } } |
補足
-s オプションを使用することによって、デコンパイルされたファイルの拡張子を変更することも出来ます。
>jad -sjava Sample.class
様々なライブラリを利用すると、classファイルはあるけど、ソースコードがないときがあります。そのようなときにデコンパイラ―を活用してみてください。