[建立和构建应用程序的主要工具] 之 javap

官网-javaphtml

1. 简述

反汇编一个或多个类文件。java

2. 命令

用法: javap <options> <classes>
其中, 可能的选项包括:
  -help  --help  -?        输出此用法消息
  -version                 版本信息
  -v  -verbose             输出附加信息
  -l                       输出行号和本地变量表
  -public                  仅显示公共类和成员
  -protected               显示受保护的/公共类和成员
  -package                 显示程序包/受保护的/公共类
                           和成员 (默认)
  -p  -private             显示全部类和成员
  -c                       对代码进行反汇编
  -s                       输出内部类型签名
  -sysinfo                 显示正在处理的类的
                           系统信息 (路径, 大小, 日期, MD5 散列)
  -constants               显示最终常量
  -classpath <path>        指定查找用户类文件的位置
  -cp <path>               指定查找用户类文件的位置
  -bootclasspath <path>    覆盖引导类文件的位置
复制代码

3. example

javabash

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);
        }
}
复制代码

classoracle

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 -v -c -verbose  DocFooter
复制代码

resultapp

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        
}
复制代码
相关文章
相关标签/搜索