「javap」

javap,返汇编一个或者多个class文件。

命令行语法格式及含义(SYNOPSIS)

javap [options] classfile…

options
命令行选项。查看下面的OPTIONS章节。

classfile
要返汇编的class文件。或多个class由空格分隔,以便为注释(如DocFooter.class)处理。
可以指定可以在class path中找到的class,其类型为文件名或URL等,如:file:///home/user/myproject/src/DocFooter.class

命令描述(DESCRIPTION)

javap命令用于反汇编一个或多个class文件。输出取决于所使用的选项。

当不使用任何选项时,javap命令将打印package、protected、public的字段以及传递给javap的class的方法。

javap命令默认将其输出打印到stdout。

命令支持的选项及含义(OPTIONS)

-l
打印局部变量表
这里的指的是空白行,是为了增加输出的可读性。

-public
仅显示public的class和成员。

-protected
仅显示public和protected的class和成员。

-private, -p
显示所有的class和成员。

-s
打印内部的类型签名。

-sysinfo
显示将要处理的class的系统信息(path, size, date, MD5 hash)

-constants
显示static final常量。

-c
打印反汇编代码,例如,构成Java字节码的指令、类中的每个方法。

-verbose
打印栈大小、本地变量数量、函数参数及数量。

-classpath path
指定javap命令用于查找class的路径。设置后,覆盖默认的或CLASSPATH环境变量中指定的。

-bootclasspath path
指定加载引导类的路径。默认情况下,引导类是实现核心Java平台的类,位于jre/lib/rt.jar和其他几个JAR文件中的。

-extdir dirs
对搜索的安装扩展的安装位置进行覆盖。
扩展的默认位置是java.ext.dirs指定的值。

-J<option>
将指定的选项传递给JVM。例如:

javap -J-version

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

有关JVM选项的更多信息,请参阅命令文档。

帮助类型选项

-help, –help, -?
打印帮助信息。

-version
打印版本信息。

简单示例(EXAMPLE)

Compile the following 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);
}

}

The output from the 「javap DocFooter.class」 command yields the following:

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

}

The output from 「javap -c DocFooter.class」 command yields the following:

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

}

相关文档(SEE ALSO)

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

参考文献