web-dev-qa-db-ja.com

Java .classファイルを人間が読める方法で開くにはどうすればよいですか?

Javaアプレットのクラスファイルが内部で何をしているのかを理解しようとしています。 NotepadまたはTextpadで開くと、ただのぐちゃぐちゃなグループが表示されます。

それをやや読みやすい形式に戻す方法はありますか?それで私はそれが何をしているのかを理解しようとすることができますか?

  • 環境== VS 2008がインストールされたWindows。
102
cpuguru

jd-gui は現時点で最高の逆コンパイラです。 Javaの新しい機能を、扱いにくいJADと比較して処理できます。

196
DarenW

バイトコードの読み取りを気にしない場合、javapは正常に動作するはずです。これは、標準のJDKインストールの一部です。

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure
70
Michael Myers

Java逆コンパイラが必要な場合は、コマンドラインツールjavapを使用してこれを行うことができます。また、 Java Decompiler HOW-TO では、クラスファイルを逆コンパイルする方法について説明しています。

7
Drew Frezell

Jad を使用して逆コンパイルするのがおそらく最良のオプションです。コードが難読化されていない限り、大丈夫な結果が生成されます。

2
Rasmus Faber

あなたが探しているのはJava逆コンパイラです。 JADをお勧めします http://www.kpdus.com/jad.html 非営利目的での使用は無料で、仕事は完了です。

注:これにより、コードが記述されたものと完全に同じになるわけではありません。つまり、コメントや変数名が失われる可能性があるため、通常のソースコードを読むよりも少し難しくなります。開発者が本当に秘密を守っていれば、コードも難読化され、読みにくくなります。

2
David Beleznay

@MichaelMyersが指摘したように、

javap -c <name of Java class file> 

jVMアセンブリコードを取得します。見やすくするために、出力をテキストファイルにリダイレクトすることもできます。

javap -c <name of Java class file> > decompiled.txt
2
Nilashish C

cpuguru、アプレットがjavac 1.3(またはそれ以下)でコンパイルされている場合、最良のオプションはJadを使用することです。

残念ながら、JAD 1.5.8(2001年4月14日)でサポートされている最後のJDKはJDK 1.3です。

アプレットが最新のコンパイラでコンパイルされている場合、 JD-GUI を試すことができます。このデコンパイラは開発中ですが、ほとんどの場合、正しいJavaソースを生成します。 JDK 1.4、1.5、または1.6でコンパイルされたクラスの場合。

DarenW、あなたの投稿に感謝します。 JD-GUIはまだ最高の逆コンパイラではありません...しかし、私は取り組んでいます:)

2
Emmanuel Dupuy

調べたいクラスファイルがオープンソースの場合、それを逆コンパイルするのではなく、ソースファイルをIDEに直接添付する必要があります。そうすれば、自分のライブラリクラスのようにライブラリクラスのコードを表示できます

1
arturh

これはコンパイルされたコードです。JADのような逆コンパイラを使用する必要があります。 http://www.kpdus.com/jad.html

1
cynicalman

逆コンパイラを使用する必要があります。他の人はJADを提案していますが、他のオプションもありますが、JADが最適です。

元のソースコードと比較して少し失われる可能性があるというコメントをエコーし​​ます。消去のためにコードでジェネリックが使用されている場合は、特におかしくなります。

1
Zac Gochenour

jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.Zip&can=2&q= "が最適であり、 .classファイルを逆コンパイルするためのユーザーフレンドリーなオプション...

確かにJADやJADclipse Eclipseプラグイン。

1
John Gardner

また、利用可能なオンラインJavaデコンパイラを使用することもできます。たとえば http://www.javadecompilers.com

0
Prachi Sharma

Applet.classを逆コンパイルする必要はありません。パブリックJava AP​​IクラスのソースコードはJDKに付属しており(インストールすることを選択した場合)、逆コンパイルされたバイトコードよりも読みやすくなります。 src.Zipに圧縮ファイルがあります(JDKインストールフォルダーにあります)。

0
Arno

提案されているように、JADを使用してそれを逆コンパイルし、ファイルを表示できます。読みやすくするには、Eclipse用JADclipseプラグインを使用してJADをEclipseに直接統合するか、コマンドラインJADよりもはるかに使いやすいDJ Java Decompilerを使用します。

0
amitwadhwa

結果として読み取り可能なJavaコードが必要な場合、JADは優れたオプションです。ただし、本当に.classファイル形式の内部を詳しく調べたい場合は、javapが必要になります。 JDKにバンドルされており、16進バイトコードを読み取り可能なASCIIに「逆コンパイル」できます。生成する言語はバイトコード(Javaのようなものではない)ですが、かなり読みやすく、非常に有益です。

また、本当にしたい場合は、.classファイルを16進エディターで開き、バイトコードを直接読み取ることができます。結果は、javapを使用した場合と同じです。

0
Daniel Spiewak

CFR-別のJavaデコンパイラ は、i Javaで書かれた現代のJavaに最適なデコンパイラです。

0
tidbeck