javap(1)

名前
javap - Java クラスファイル逆アセンブラ

クラスファイルを逆アセンブルします。

形式

javap [ options ] classes

説明

javap コマンドは、1 つまたは複数のクラスファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、javap は、そのパッケージ、渡されたクラスの protected および public のフィールドとメソッドを出力します。javap はその出力を標準出力に表示します。

    options
        コマンド行オプション。

    classes
        注釈の処理対象となる 1 つ以上のクラス DocFooter.class など) のリスト (空白区切り)。クラスパスで見つかるクラスは、ファイル名 ( /home/user/myproject/src/DocFooter.class など) または URL ( file:///home/user/myproject/src/DocFooter.class など) で指定できます。

たとえば、次のクラス宣言をコンパイルするとします。

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.class がもたらす出力は次のようになります。

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);
}

javap -c DocFooter.class がもたらす出力は次のようになります。

Compiled from "DocFooter.java"
public class DocFooter extends java.applet.Applet {
  java.lang.String date;
  java.lang.String email;
  public DocFooter();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/applet/Applet."<init>":()V
       4: return
  public void init();
    Code:
       0: aload_0
       1: sipush        500
       4: bipush        100
       6: invokevirtual #2                  // Method resize:(II)V
       9: aload_0
      10: aload_0
      11: ldc           #3                  // String LAST_UPDATED
      13: invokevirtual #4                  // Method getParameter:(Ljava/lang/String;)Ljava/lang/String;
      16: putfield      #5                  // Field date:Ljava/lang/String;
      19: aload_0
      20: aload_0
      21: ldc           #6                  // String EMAIL
      23: invokevirtual #4                  // Method getParameter:(Ljava/lang/String;)Ljava/lang/String;
      26: putfield      #7                  // Field email:Ljava/lang/String;
      29: return
  public void paint(java.awt.Graphics);
    Code:
       0: aload_1
       1: new           #8                  // class java/lang/StringBuilder
       4: dup
       5: invokespecial #9                  // Method java/lang/StringBuilder."<init>":()V
       8: aload_0
       9: getfield      #5                  // Field date:Ljava/lang/String;
      12: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      15: ldc           #11                 // String  by
      17: invokevirtual #10                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: invokevirtual #12                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      23: bipush        100
      25: bipush        15
      27: invokevirtual #13                 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      30: aload_1
      31: aload_0
      32: getfield      #7                  // Field email:Ljava/lang/String;
      35: sipush        290
      38: bipush        15
      40: invokevirtual #13                 // Method java/awt/Graphics.drawString:(Ljava/lang/String;II)V
      43: return
}

オプション

    -help --help -?
        javap のヘルプメッセージを出力します。

    -version
        バージョン情報を表示します。

    -l  行番号と局所変数テーブルを表示します。

    -public
        public クラスおよびメンバーだけを表示します。

    -protected
        protected および public のクラスとメンバーだけを表示します。

    -package
        package、protected、および public のクラスとメンバーだけを表示します。これはデフォルトの設定です。

    -private -p
        すべてのクラスとメンバーを表示します。

    -Jflag
        ランタイムシステムに直接 flag を渡します。使用例を次に示します。

        javap -J-version
        javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName

    -s  内部の型シグニチャーを出力します。

    -sysinfo
        処理中のクラスのシステム情報 (パス、サイズ、日付、MD5 ハッシュ) を表示します。

    -constants
        static final 定数を表示します。

    -c  クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは 「Java Virtual Machine Specification」 @
        http://java.sun.com/docs/books/vmspec/にドキュメント化されています。

    -verbose
        メソッドのスタックサイズ、および locals と args の数を出力します。

    -classpath path
        javap がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。

    -bootclasspath path
        ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは jre/lib/rt.jar および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。

    -extdirs dirs
        インストールされた拡張機能を検索する場所をオーバーライドします。拡張機能は、デフォルトでは java.ext.dirs にあります。

関連項目

javac(1)、java(1)、jdb(1)、javah(1)、javadoc(1)