Mac终端输入javap报错

10 篇文章 0 订阅

1、报错内容:

     a、错误:找不到类

     b、错误:找不到或无法加载主类


2、原因:虽然idea里面编译过对应文件,但是终端输入javap时候,依然报错:a或者b,虽然已经进入了对应文件的路径下面。好像是Mac需要首先找到文件所做目录,然后在该环境下利用javac编译一下该.java文件;再运行javap命令查看该.java文件对应的class文件的字节码。


3、javap功能:javap是idk自带的反编译工具命令,来查看class文件的字节码信息。


4、说明:Mac环境下,我的文件存储路径:

文件:~/IdeaProjects/JavaBaseTest/src/niukeWeb/evalRPN.java


5、首先进入目录:niukeWeb

   该目录下编译该文件evalRPN.java

   javap查看.class文件的字节码

以上3个命令如图:



输入第3个命令后:终端显示信息如下:

警告: 二进制文件evalRPN包含niukeWeb.evalRPN
Classfile /Users/caoxiaohong/IdeaProjects/JavaBaseTest/src/niukeWeb/evalRPN.class
  Last modified 2017-6-22; size 1704 bytes
  MD5 checksum ca2560d25a5b56ffa2e99b2294fd66fc
  Compiled from "evalRPN.java"
public class niukeWeb.evalRPN
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #29.#48        // java/lang/Object."<init>":()V
   #2 = Class              #49            // java/util/Stack
   #3 = Methodref          #2.#48         // java/util/Stack."<init>":()V
   #4 = Fieldref           #19.#50        // niukeWeb/evalRPN.stack:Ljava/util/Stack;
   #5 = Fieldref           #19.#51        // niukeWeb/evalRPN.length:I
   #6 = Methodref          #10.#52        // java/lang/Integer.parseInt:(Ljava/lang/String;)I
   #7 = String             #53            // +
   #8 = Methodref          #21.#54        // java/lang/String.equals:(Ljava/lang/Object;)Z
   #9 = Methodref          #2.#55         // java/util/Stack.pop:()Ljava/lang/Object;
  #10 = Class              #56            // java/lang/Integer
  #11 = Methodref          #10.#57        // java/lang/Integer.intValue:()I
  #12 = Fieldref           #19.#58        // niukeWeb/evalRPN.result:I
  #13 = Methodref          #10.#59        // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
  #14 = Methodref          #2.#60         // java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
  #15 = String             #61            // -
  #16 = String             #62            // *
  #17 = String             #63            // /
  #18 = Methodref          #21.#64        // java/lang/String.trim:()Ljava/lang/String;
  #19 = Class              #65            // niukeWeb/evalRPN
  #20 = Methodref          #19.#48        // niukeWeb/evalRPN."<init>":()V
  #21 = Class              #66            // java/lang/String
  #22 = String             #67            // 2
  #23 = String             #68            // 1
  #24 = String             #69            // 3
  #25 = Methodref          #19.#70        // niukeWeb/evalRPN.evalRPN:([Ljava/lang/String;)I
  #26 = Fieldref           #71.#72        // java/lang/System.out:Ljava/io/PrintStream;
  #27 = Methodref          #73.#74        // java/io/PrintStream.println:(I)V
  #28 = String             #75            // 0
  #29 = Class              #76            // java/lang/Object
  #30 = Utf8               stack
  #31 = Utf8               Ljava/util/Stack;
  #32 = Utf8               Signature
  #33 = Utf8               Ljava/util/Stack<Ljava/lang/Integer;>;
  #34 = Utf8               length
  #35 = Utf8               I
  #36 = Utf8               result
  #37 = Utf8               <init>
  #38 = Utf8               ()V
  #39 = Utf8               Code
  #40 = Utf8               LineNumberTable
  #41 = Utf8               evalRPN
  #42 = Utf8               ([Ljava/lang/String;)I
  #43 = Utf8               StackMapTable
  #44 = Utf8               main
  #45 = Utf8               ([Ljava/lang/String;)V
  #46 = Utf8               SourceFile
  #47 = Utf8               evalRPN.java
  #48 = NameAndType        #37:#38        // "<init>":()V
  #49 = Utf8               java/util/Stack
  #50 = NameAndType        #30:#31        // stack:Ljava/util/Stack;
  #51 = NameAndType        #34:#35        // length:I
  #52 = NameAndType        #77:#78        // parseInt:(Ljava/lang/String;)I
  #53 = Utf8               +
  #54 = NameAndType        #79:#80        // equals:(Ljava/lang/Object;)Z
  #55 = NameAndType        #81:#82        // pop:()Ljava/lang/Object;
  #56 = Utf8               java/lang/Integer
  #57 = NameAndType        #83:#84        // intValue:()I
  #58 = NameAndType        #36:#35        // result:I
  #59 = NameAndType        #85:#86        // valueOf:(I)Ljava/lang/Integer;
  #60 = NameAndType        #87:#88        // push:(Ljava/lang/Object;)Ljava/lang/Object;
  #61 = Utf8               -
  #62 = Utf8               *
  #63 = Utf8               /
  #64 = NameAndType        #89:#90        // trim:()Ljava/lang/String;
  #65 = Utf8               niukeWeb/evalRPN
  #66 = Utf8               java/lang/String
  #67 = Utf8               2
  #68 = Utf8               1
  #69 = Utf8               3
  #70 = NameAndType        #41:#42        // evalRPN:([Ljava/lang/String;)I
  #71 = Class              #91            // java/lang/System
  #72 = NameAndType        #92:#93        // out:Ljava/io/PrintStream;
  #73 = Class              #94            // java/io/PrintStream
  #74 = NameAndType        #95:#96        // println:(I)V
  #75 = Utf8               0
  #76 = Utf8               java/lang/Object
  #77 = Utf8               parseInt
  #78 = Utf8               (Ljava/lang/String;)I
  #79 = Utf8               equals
  #80 = Utf8               (Ljava/lang/Object;)Z
  #81 = Utf8               pop
  #82 = Utf8               ()Ljava/lang/Object;
  #83 = Utf8               intValue
  #84 = Utf8               ()I
  #85 = Utf8               valueOf
  #86 = Utf8               (I)Ljava/lang/Integer;
  #87 = Utf8               push
  #88 = Utf8               (Ljava/lang/Object;)Ljava/lang/Object;
  #89 = Utf8               trim
  #90 = Utf8               ()Ljava/lang/String;
  #91 = Utf8               java/lang/System
  #92 = Utf8               out
  #93 = Utf8               Ljava/io/PrintStream;
  #94 = Utf8               java/io/PrintStream
  #95 = Utf8               println
  #96 = Utf8               (I)V
{
  java.util.Stack<java.lang.Integer> stack;
    descriptor: Ljava/util/Stack;
    flags:
    Signature: #33                          // Ljava/util/Stack<Ljava/lang/Integer;>;

  int length;
    descriptor: I
    flags:

  int result;
    descriptor: I
    flags:

  public niukeWeb.evalRPN();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: aload_0
         5: new           #2                  // class java/util/Stack
         8: dup
         9: invokespecial #3                  // Method java/util/Stack."<init>":()V
        12: putfield      #4                  // Field stack:Ljava/util/Stack;
        15: return
      LineNumberTable:
        line 11: 0
        line 12: 4

  int evalRPN(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)I
    flags:
    Code:
      stack=3, locals=5, args_size=2
         0: aload_0
         1: aload_1
         2: arraylength
         3: putfield      #5                  // Field length:I
         6: aload_0
         7: getfield      #5                  // Field length:I
        10: iconst_1
        11: if_icmpne     21
        14: aload_1
        15: iconst_0
        16: aaload
        17: invokestatic  #6                  // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
        20: ireturn
        21: iconst_0
        22: istore_2
        23: iload_2
        24: aload_0
        25: getfield      #5                  // Field length:I
        28: if_icmpge     321
        31: aload_1
        32: iload_2
        33: aaload
        34: ldc           #7                  // String +
        36: invokevirtual #8                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
        39: ifeq          97
        42: aload_0
        43: getfield      #4                  // Field stack:Ljava/util/Stack;
        46: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
        49: checkcast     #10                 // class java/lang/Integer
        52: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
        55: istore_3
        56: aload_0
        57: getfield      #4                  // Field stack:Ljava/util/Stack;
        60: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
        63: checkcast     #10                 // class java/lang/Integer
        66: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
        69: istore        4
        71: aload_0
        72: iload_3
        73: iload         4
        75: iadd
        76: putfield      #12                 // Field result:I
        79: aload_0
        80: getfield      #4                  // Field stack:Ljava/util/Stack;
        83: aload_0
        84: getfield      #12                 // Field result:I
        87: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
        90: invokevirtual #14                 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
        93: pop
        94: goto          315
        97: aload_1
        98: iload_2
        99: aaload
       100: ldc           #15                 // String -
       102: invokevirtual #8                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
       105: ifeq          163
       108: aload_0
       109: getfield      #4                  // Field stack:Ljava/util/Stack;
       112: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       115: checkcast     #10                 // class java/lang/Integer
       118: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       121: istore_3
       122: aload_0
       123: getfield      #4                  // Field stack:Ljava/util/Stack;
       126: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       129: checkcast     #10                 // class java/lang/Integer
       132: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       135: istore        4
       137: aload_0
       138: iload         4
       140: iload_3
       141: isub
       142: putfield      #12                 // Field result:I
       145: aload_0
       146: getfield      #4                  // Field stack:Ljava/util/Stack;
       149: aload_0
       150: getfield      #12                 // Field result:I
       153: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       156: invokevirtual #14                 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
       159: pop
       160: goto          315
       163: aload_1
       164: iload_2
       165: aaload
       166: ldc           #16                 // String *
       168: invokevirtual #8                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
       171: ifeq          229
       174: aload_0
       175: getfield      #4                  // Field stack:Ljava/util/Stack;
       178: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       181: checkcast     #10                 // class java/lang/Integer
       184: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       187: istore_3
       188: aload_0
       189: getfield      #4                  // Field stack:Ljava/util/Stack;
       192: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       195: checkcast     #10                 // class java/lang/Integer
       198: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       201: istore        4
       203: aload_0
       204: iload_3
       205: iload         4
       207: imul
       208: putfield      #12                 // Field result:I
       211: aload_0
       212: getfield      #4                  // Field stack:Ljava/util/Stack;
       215: aload_0
       216: getfield      #12                 // Field result:I
       219: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       222: invokevirtual #14                 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
       225: pop
       226: goto          315
       229: aload_1
       230: iload_2
       231: aaload
       232: ldc           #17                 // String /
       234: invokevirtual #8                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
       237: ifeq          295
       240: aload_0
       241: getfield      #4                  // Field stack:Ljava/util/Stack;
       244: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       247: checkcast     #10                 // class java/lang/Integer
       250: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       253: istore_3
       254: aload_0
       255: getfield      #4                  // Field stack:Ljava/util/Stack;
       258: invokevirtual #9                  // Method java/util/Stack.pop:()Ljava/lang/Object;
       261: checkcast     #10                 // class java/lang/Integer
       264: invokevirtual #11                 // Method java/lang/Integer.intValue:()I
       267: istore        4
       269: aload_0
       270: iload         4
       272: iload_3
       273: idiv
       274: putfield      #12                 // Field result:I
       277: aload_0
       278: getfield      #4                  // Field stack:Ljava/util/Stack;
       281: aload_0
       282: getfield      #12                 // Field result:I
       285: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       288: invokevirtual #14                 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
       291: pop
       292: goto          315
       295: aload_0
       296: getfield      #4                  // Field stack:Ljava/util/Stack;
       299: aload_1
       300: iload_2
       301: aaload
       302: invokevirtual #18                 // Method java/lang/String.trim:()Ljava/lang/String;
       305: invokestatic  #6                  // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
       308: invokestatic  #13                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       311: invokevirtual #14                 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
       314: pop
       315: iinc          2, 1
       318: goto          23
       321: aload_0
       322: getfield      #12                 // Field result:I
       325: ireturn
      LineNumberTable:
        line 16: 0
        line 17: 6
        line 19: 21
        line 20: 31
        line 21: 42
        line 22: 56
        line 23: 71
        line 24: 79
        line 25: 94
        line 26: 108
        line 27: 122
        line 28: 137
        line 29: 145
        line 30: 160
        line 31: 174
        line 32: 188
        line 33: 203
        line 34: 211
        line 35: 226
        line 36: 240
        line 37: 254
        line 38: 269
        line 39: 277
        line 40: 292
        line 42: 295
        line 19: 315
        line 45: 321
      StackMapTable: number_of_entries = 8
        frame_type = 21 /* same */
        frame_type = 252 /* append */
          offset_delta = 1
          locals = [ int ]
        frame_type = 251 /* same_frame_extended */
          offset_delta = 73
        frame_type = 251 /* same_frame_extended */
          offset_delta = 65
        frame_type = 251 /* same_frame_extended */
          offset_delta = 65
        frame_type = 251 /* same_frame_extended */
          offset_delta = 65
        frame_type = 19 /* same */
        frame_type = 250 /* chop */
          offset_delta = 5

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=1
         0: new           #19                 // class niukeWeb/evalRPN
         3: dup
         4: invokespecial #20                 // Method "<init>":()V
         7: astore_1
         8: iconst_5
         9: anewarray     #21                 // class java/lang/String
        12: dup
        13: iconst_0
        14: ldc           #22                 // String 2
        16: aastore
        17: dup
        18: iconst_1
        19: ldc           #23                 // String 1
        21: aastore
        22: dup
        23: iconst_2
        24: ldc           #7                  // String +
        26: aastore
        27: dup
        28: iconst_3
        29: ldc           #24                 // String 3
        31: aastore
        32: dup
        33: iconst_4
        34: ldc           #16                 // String *
        36: aastore
        37: astore_2
        38: aload_1
        39: aload_2
        40: invokevirtual #25                 // Method evalRPN:([Ljava/lang/String;)I
        43: istore_3
        44: getstatic     #26                 // Field java/lang/System.out:Ljava/io/PrintStream;
        47: iload_3
        48: invokevirtual #27                 // Method java/io/PrintStream.println:(I)V
        51: iconst_1
        52: anewarray     #21                 // class java/lang/String
        55: dup
        56: iconst_0
        57: ldc           #22                 // String 2
        59: aastore
        60: astore        4
        62: aload_1
        63: aload         4
        65: invokevirtual #25                 // Method evalRPN:([Ljava/lang/String;)I
        68: istore        5
        70: getstatic     #26                 // Field java/lang/System.out:Ljava/io/PrintStream;
        73: iload         5
        75: invokevirtual #27                 // Method java/io/PrintStream.println:(I)V
        78: iconst_3
        79: anewarray     #21                 // class java/lang/String
        82: dup
        83: iconst_0
        84: ldc           #28                 // String 0
        86: aastore
        87: dup
        88: iconst_1
        89: ldc           #24                 // String 3
        91: aastore
        92: dup
        93: iconst_2
        94: ldc           #17                 // String /
        96: aastore
        97: astore        6
        99: aload_1
       100: aload         6
       102: invokevirtual #25                 // Method evalRPN:([Ljava/lang/String;)I
       105: istore        7
       107: getstatic     #26                 // Field java/lang/System.out:Ljava/io/PrintStream;
       110: iload         7
       112: invokevirtual #27                 // Method java/io/PrintStream.println:(I)V
       115: return
      LineNumberTable:
        line 49: 0
        line 50: 8
        line 51: 38
        line 52: 44
        line 54: 51
        line 55: 62
        line 56: 70
        line 58: 78
        line 59: 99
        line 60: 107
        line 61: 115
}
SourceFile: "evalRPN.java"
cxhdeMacBook-Air:niukeweb caoxiaohong$ 

到此,查看.class字节码的准备工作就做完了,通过分析字节码信息来分析.class文件中常量等信息。


6、补充:.class文件结构:

类文件{

  OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组

  }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值