javap − Java クラスファイル逆アセンブラ
クラスファイルを逆アセンブルします。
javap [ options ] class...
javap コマンドは、 Java クラスファイルを逆アセンブルします。 出力内容はオプションで指定します。 オプションを 1 つも指定しないと、 javap は渡されたクラスの package、 protected、 および public フィールドとメソッドを出力します。 javap コマンドの出力先は stdout です。たとえば、以下のクラス宣言をコンパイルします。
import java.awt.*;
import java.applet.*;
public class DocFooter extends Applet {
String date; |
||||
String email; |
||||
public void init() { |
||||
resize(500,100); |
||||
date = getParameter("LAST_UPDATED"); |
||||
email = getParameter("EMAIL"); |
||||
} |
||||
public void paint(Graphics g) { |
||||
g.drawString(date + " by ",100, 15); |
||||
g.drawString(email,290,15); |
||||
} |
}
この場合、 javap DocFooter を実行すると以下の出力が得られます。
Compiled from DocFooter.java
public class DocFooter extends java.applet.Applet {
java.lang.String date; |
|
java.lang.String email; |
|
public void init(); |
|
public void paint(java.awt.Graphics); |
|
public DocFooter(); |
}
javap −c DocFooter を実行すると以下の出力が得られます。
Compiled from DocFooter.java
public class DocFooter extends java.applet.Applet {
java.lang.String date;
java.lang.String email;
public DocFooter();
public void init();
public void paint(java.awt.Graphics);
}
Method DocFooter()
0 aload_0
1 invokespecial #1 <Method java.applet.Applet()>
4 return
Method void init()
0 aload_0
1 sipush 500
4 bipush 100
6 invokevirtual #2 <Method void resize(int, int)>
9 aload_0
10 aload_0
11 ldc #3 <String "LAST_UPDATED">
13 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
16 putfield #5 <Field java.lang.String date>
19 aload_0
20 aload_0
21 ldc #6 <String "EMAIL">
23 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
26 putfield #7 <Field java.lang.String email>
29 return
Method void paint(java.awt.Graphics)
0 aload_1
1 new #8 <Class java.lang.StringBuffer>
4 dup
5 invokespecial #9 <Method java.lang.StringBuffer()>
8 aload_0
9 getfield #5 <Field java.lang.String date>
12 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
15 ldc #11 <String " by ">
17 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
20 invokevirtual #12 <Method java.lang.String toString()>
23 bipush 100
25 bipush 15
27 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
30 aload_1
31 aload_0
32 getfield #7 <Field java.lang.String email>
35 sipush 290
38 bipush 15
40 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
43 return
−help
javap のヘルプメッセージを出力します。
−l |
行番号と局所変数テーブルを表示します。 |
||
−b |
JDK 1.1 の javap との下位互換性を保証します。 |
−public
public クラスおよびメンバだけを表示します。
−protected
protected および public のクラスとメンバだけを表示します。
−package
package、protected、および public のクラスとメンバだけを表示します。これはデフォルトの設定です。
−private
すべてのクラスとメンバを表示します。
−Jflag
ランタイムシステムに直接 flag を渡します。使用例を次に示します。
javap −J−version
javap −J−Djava.security.manager −J−Djava.security.policy=MyPolicy MyClassName
−s |
内部の型シグニチャーを出力します。 |
||
−c |
クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは |
http://java.sun.com/docs/books/vmspec/ の 「Java Virtual Machine Specification」にドキュメント化されています。
−verbose
メソッドのスタックサイズ、および locals と args の数を出力します。
−classpath path
javap がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、path の一般形式は次のようになります。
.:<your_path>
次に例を示します。
−bootclasspath path
ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは jre/lib/rt.jar および他のいくつかの JAR ファイル にある、コア Java プラットフォームを実装するクラスです。
−extdirs dirs
インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能は、デフォルトでは java.ext.dirs にあります。
CLASSPATH |
ユーザ定義クラスへのパスをシステムに通知するために使用します。 複数のディレクトリを指定する場合はコロンで区切ります。 以下に例を示します。 |
.:/home/avh/classes:/usr/local/java/classes
javac、java、jdb、javah、javadoc