私は、Javaアプレットのクラスファイルが内部で何をしているかを理解しようとしています。NotepadまたはTextpadでそれを開くと、大量のゴブルディグックが表示されます。
それをやや読みやすい形式に戻す方法はありますか?それで私はそれが何をしているのか理解しようとすることができますか?
- 環境== VS 2008がインストールされたWindows。
私は、Javaアプレットのクラスファイルが内部で何をしているかを理解しようとしています。NotepadまたはTextpadでそれを開くと、大量のゴブルディグックが表示されます。
それをやや読みやすい形式に戻す方法はありますか?それで私はそれが何をしているのか理解しようとすることができますか?
回答:
jd-guiは現時点で最高の逆コンパイラです。ほこりっぽいJADと比較して、Javaの新しい機能を処理できます。
バイトコードを読んでも構わないのであれば、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
Javaデコンパイラが必要な場合は、コマンドラインツールjavap
を使用してこれを行うことができます。また、Java Decompiler HOW-TOでは、クラスファイルを逆コンパイルする方法について説明しています。
あなたが探しているのは、Java逆コンパイラです。JADをお勧めしますhttp://www.kpdus.com/jad.html 非営利目的の使用は無料で、仕事をこなします。
注:これによって、コードが記述されたものとまったく同じになるわけではありません。つまり、コメントや変数名が失われる可能性があるため、通常のソースコードを読み取るよりも少し難しくなります。開発者が本当に秘密にされている場合、彼らもコードを難読化して読みにくくしています。
cpuguru、アプレットがjavac 1.3(またはそれ以下)でコンパイルされている場合、最善のオプションはJadを使用することです。
残念ながら、JAD 1.5.8(2001年4月14日)でサポートされている最後のJDKはJDK 1.3です。
アプレットが最新のコンパイラでコンパイルされている場合は、JD-GUIを試すことができます。このデコンパイラは開発中ですが、JDK 1.4、1.5、または1.6でコンパイルされたクラスに対して、ほとんどの場合、正しいJavaソースを生成します。
DarenW、投稿ありがとうございます。JD-GUIはまだ最高のデコンパイラーではありません...しかし、私は作業中です:)
jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= "は、.classを逆コンパイルするための最良でユーザーフレンドリーなオプションですファイル....
Jadを使用して逆コンパイルするのがおそらく最良の方法です。コードが難読化されていない限り、問題はありません。
デコンパイラーを使用する必要があります。他の人はJADを提案しました、他のオプションがあり、JADが最高です。
元のソースコードと比較して少し失う可能性があるというコメントをエコーします。消去のため、コードがジェネリックを使用している場合は特におかしくなります。
提案されているように、JADを使用して逆コンパイルしてファイルを表示できます。読みやすくするために、EclipseのJADclipseプラグインを使用してJADを直接Eclipseに統合するか、コマンドラインJADよりもはるかに使いやすいDJ Java Decompilerを使用できます。
JADは、結果として読みやすいJavaコードが必要な場合に最適なオプションです。.class
ただし、ファイル形式の内部を掘り下げたい場合は、その必要がありますjavap
。これはJDKにバンドルされており、16進数のバイトコードを読み取り可能なASCIIに「逆コンパイル」できます。それが生成する言語はまだバイトコード(Javaのようなものではありません)ですが、かなり読みやすく、非常に有益です。
また、本当に必要な場合.class
は、16進エディタで任意のファイルを開き、バイトコードを直接読み取ることができます。結果はを使用した場合と同じですjavap
。
CFR-別のJavaデコンパイラーは、Java 6で記述された最新のJava用の優れたデコンパイラーです。
利用可能なオンラインJavaデコンパイラーを使用することもできます。たとえばhttp://www.javadecompilers.com