【问题标题】:How can I disassemble all code with javap? [duplicate]如何使用 javap 反汇编所有代码? [复制]
【发布时间】:2021-04-28 17:58:52
【问题描述】:

我想查看带有javap -c 的Class 文件的字节码,但它似乎并没有消除我所有的代码。这里是FooBar.java

class FooBar {
    public static void main(String[] args) {
        if (args[0].equals("foo")) {
            System.out.println("bar");
        } else {
            notFoo();
        }
    }

    private static void notFoo() {
        System.out.println("not Foo");
    }
}

使用javac FooBar.java 编译。然后我尝试用javap -c FooBar.class 反汇编它,输出:

class FooBar {
  FooBar();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: aload_0
       1: iconst_0
       2: aaload
       3: ldc           #2                  // String foo
       5: invokevirtual #3                  // Method java/lang/String.equals:(Ljava/lang/Object;)Z
       8: ifeq          22
      11: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
      14: ldc           #5                  // String bar
      16: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      19: goto          25
      22: invokestatic  #7                  // Method notFoo:()V
      25: return
}

如您所见,这似乎只反汇编了main 方法,并没有显示反汇编的notFoo() 方法。

我怎样才能拆开所有东西?

【问题讨论】:

    标签: java javap


    【解决方案1】:

    javap 默认只显示公共方法。

    传递-p 参数以查看所有内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-17
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 2012-06-01
      • 2014-05-29
      • 1970-01-01
      相关资源
      最近更新 更多