javac Javap的简单使用

1.javac 编译器的使用

Javac -d destdir srcFile

Javac -d  .   srcFile      路径为当前的路径

2. javap 反编译的简单应用

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

javap -c

D:\com\company>javap -c TestIncrease.class
Compiled from "TestIncrease.java"
public class com.company.TestIncrease {
  public com.company.TestIncrease();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0
       1: istore_1
       2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       5: new           #3                  // class java/lang/StringBuilder
       8: dup
       9: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      12: ldc           #5                  // String
      14: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      17: iload_1
      18: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      21: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      24: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      27: iconst_0
      28: istore_2
      29: iload_2
      30: bipush        10
      32: if_icmpge     44
      35: iinc          1, 1
      38: iinc          2, 1
      41: goto          29
      44: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
      47: new           #3                  // class java/lang/StringBuilder
      50: dup
      51: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
      54: ldc           #5                  // String
      56: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      59: iload_1
      60: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      63: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      66: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      69: return
}

Javap -v

D:\com\company>javap -v TestIncrease.class
Classfile /D:/com/company/TestIncrease.class
  Last modified 2019-5-18; size 729 bytes
  MD5 checksum 51f06c604a0a6412c3417539347b40ed
  Compiled from "TestIncrease.java"
public class com.company.TestIncrease
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #11.#21        // java/lang/Object."<init>":()V
   #2 = Fieldref           #22.#23        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Class              #24            // java/lang/StringBuilder
   #4 = Methodref          #3.#21         // java/lang/StringBuilder."<init>":()V
   #5 = String             #25            //
   #6 = Methodref          #3.#26         // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
   #7 = Methodref          #3.#27         // java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
   #8 = Methodref          #3.#28         // java/lang/StringBuilder.toString:()Ljava/lang/String;
   #9 = Methodref          #29.#30        // java/io/PrintStream.println:(Ljava/lang/String;)V
  #10 = Class              #31            // com/company/TestIncrease
  #11 = Class              #32            // java/lang/Object
  #12 = Utf8               <init>
  #13 = Utf8               ()V
  #14 = Utf8               Code
  #15 = Utf8               LineNumberTable
  #16 = Utf8               main
  #17 = Utf8               ([Ljava/lang/String;)V
  #18 = Utf8               StackMapTable
  #19 = Utf8               SourceFile
  #20 = Utf8               TestIncrease.java
  #21 = NameAndType        #12:#13        // "<init>":()V
  #22 = Class              #33            // java/lang/System
  #23 = NameAndType        #34:#35        // out:Ljava/io/PrintStream;
  #24 = Utf8               java/lang/StringBuilder
  #25 = Utf8
  #26 = NameAndType        #36:#37        // append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
  #27 = NameAndType        #36:#38        // append:(I)Ljava/lang/StringBuilder;
  #28 = NameAndType        #39:#40        // toString:()Ljava/lang/String;
  #29 = Class              #41            // java/io/PrintStream
  #30 = NameAndType        #42:#43        // println:(Ljava/lang/String;)V
  #31 = Utf8               com/company/TestIncrease
  #32 = Utf8               java/lang/Object
  #33 = Utf8               java/lang/System
  #34 = Utf8               out
  #35 = Utf8               Ljava/io/PrintStream;
  #36 = Utf8               append
  #37 = Utf8               (Ljava/lang/String;)Ljava/lang/StringBuilder;
  #38 = Utf8               (I)Ljava/lang/StringBuilder;
  #39 = Utf8               toString
  #40 = Utf8               ()Ljava/lang/String;
  #41 = Utf8               java/io/PrintStream
  #42 = Utf8               println
  #43 = Utf8               (Ljava/lang/String;)V
{
  public com.company.TestIncrease();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
         0: iconst_0
         1: istore_1
         2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         5: new           #3                  // class java/lang/StringBuilder
         8: dup
         9: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
        12: ldc           #5                  // String
        14: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        17: iload_1
        18: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
        21: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
        24: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        27: iconst_0
        28: istore_2
        29: iload_2
        30: bipush        10
        32: if_icmpge     44
        35: iinc          1, 1
        38: iinc          2, 1
        41: goto          29
        44: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        47: new           #3                  // class java/lang/StringBuilder
        50: dup
        51: invokespecial #4                  // Method java/lang/StringBuilder."<init>":()V
        54: ldc           #5                  // String
        56: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
        59: iload_1
        60: invokevirtual #7                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
        63: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
        66: invokevirtual #9                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        69: return
      LineNumberTable:
        line 6: 0
        line 8: 2
        line 11: 27
        line 13: 35
        line 11: 38
        line 17: 44
        line 19: 69
      StackMapTable: number_of_entries = 2
        frame_type = 253 /* append */
          offset_delta = 29
          locals = [ int, int ]
        frame_type = 250 /* chop */
          offset_delta = 14
}
SourceFile: "TestIncrease.java"

猜你喜欢

转载自blog.csdn.net/qq_29235677/article/details/90318053