【问题标题】:Is it possible to view a Java class files bytecode [duplicate]是否可以查看Java类文件字节码[重复]
【发布时间】:2013-05-22 09:40:02
【问题描述】:

我正在使用 Java 进行字节码操作/生成,我只是想知道是否有一种简单的方法可以检查字节码。我不想反编译文件,我想实际查看编译后的字节码。我不需要编辑它。任何这样做的链接或程序都是可接受的答案。

【问题讨论】:

  • 您通常可以直接在 IDE 中执行此操作。也许在插件的帮助下。
  • 我认为 javap 是您正在寻找的。 JDK自带的命令。
  • 试试 javap -c 类文件
  • 不,不显示所有仅字节码字段和方法
  • @Popgalop javap -v 显示字节码 - 请参阅下面的答案。

标签: java bytecode


【解决方案1】:

The javap command-line tool 与 Oracle 的 JDK 捆绑在一起,提供 .class 文件的详细文本转储以及常量池和所有函数的字节码内容。只需使用 -v 运行它即可获得完整转储。

【讨论】:

  • 但我想看看编译器在读取文件时读取了什么,以便我可以创建自己的合成类。
  • @Popgalop 编译器读入的是实际的字节码,它不是文本格式。我想你可以在十六进制编辑器中打开它并使用this reference 自己解析它,但如果你想要一个人类可读的转储,javap -v 就是答案。
【解决方案2】:

不知道你到底需要什么,但除了javap,这是一个显示字节码的命令行工具,你可以看看javassistasmcglib——它们允许你用java代码解析字节码。

【讨论】:

    【解决方案3】:

    由于您想被引导到一些可以轻松显示字节码的程序,所以我的建议是使用 IntelliJ IDEA,因为它内置支持查看字节码。

    下面是一个示例(它也可以映射到您选择的某些键):

    非常简单,当然也可以在eclipse或者NetBeans中完成。

    【讨论】:

    • 行号在哪里? L0,L1..是什么意思????
    • 这在 Android Studio 中也可用吗?至少对于为 JVM 编译的类(如本地单元测试等)。
    • @PSIXO 我不知道,我只按原样使用 IntelliJ。
    • 请注意,这需要 ByteCode Viewer 插件
    • @voipp LINENUMBER 10 L2 表示第 10 行的代码位于标签 L2。所以L0L1 等是标签,即程序中的跳转点。在字节码中没有函数或循环,只有跳转(可以是有条件的)。所以整个程序就是一堆IF this GO there_1; IF that GO there_2
    【解决方案4】:

    我一直在研究decompiler,它具有颜色编码的字节码输出模式(我发现它比 javap 更具可读性)。它还可以输出 Java 代码或中间的“字节码 AST”。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2011-05-27
      • 1970-01-01
      相关资源
      最近更新 更多