【问题标题】:Is it possible to view bytecode of Class file? [duplicate]是否可以查看 Class 文件的字节码? [复制]
【发布时间】:2011-03-19 23:01:32
【问题描述】:

可能重复:
Is there a java classfile / bytecode editor to edit instructions?

Java 源代码被编译成字节码,实际上是在类文件中。是否可以查看已编译类的字节码?

如果可以,可以编辑吗?

是否有可用的 eclipse 插件?

【问题讨论】:

  • 查看this question 以获得Java 字节码编辑器。
  • 你需要解决的根本问题是什么?
  • 我也对@Thorbjørn 的问题感兴趣。 @Abhishek 您在类文件中寻找什么信息?还是只是出于好奇?
  • 我找到了一个网站,它允许您输入 java 代码并获取字节码作为输出。 nodejs-instantbytecode.rhcloud.com
  • 我需要创建一个分叉的 java 进程,它可以在这个进程中委托给类加载器,而不必覆盖它。如果您实现自己的类加载器,您可以将字节码加载到一个类中。但是,如果您从一个类开始,您就不能将其转换为字节码以传送到外部进程。我的需要是在运行时获取它——而不是出于好奇而查看/修改它。

标签: java bytecode bytecode-manipulation


【解决方案1】:

是的。您可以使用 JDK 附带的 javap 命令来查看类的字节码。例如:

javap -c com.mypackage.MyClass

有几个库和工具可以帮助您使用 Java 字节码,例如 ASMJasmin

【讨论】:

  • 默认不包括私有方法。使用-p 也包括它们。
  • 对我来说只使用文件名(扩展名似乎是可选的),而不是完全限定的类名:javap -c -p MyClass.class
  • javap -c com.mypackage.MyClass 将在终端(标准输出)上打印代码。我更喜欢javap -c -p com.mypackage.MyClass >> com.mypackage.MyClass.txt 来查看文件中的代码。
【解决方案2】:

JDK 附带javap,这是一个反汇编类文件中字节码的工具。可以在字节码级别进行编辑。看看BCEL,一个用于读取、操作和写入类文件的java库。

可以在java-net 上找到编辑字节码的工具和库列表。例如JBE,一个甚至带有 GUI 的 Java 字节码编辑器。

【讨论】:

    【解决方案3】:

    查看字节码

    忘记 javap!我用过的最好的插件是"ASM - Bytecode Outline plugin for Eclipse"

    http://asm.ow2.org/eclipse/index.html

    它来自 ASM(一种字节码操作框架)。

    它显示了字节码(您要求的)、堆栈元素(jvm 样式)以及如何使用 asm 框架方法生成相同的结果(以生成相同的字节码)。

    更好的是,当您选择源代码时它会这样做。 您不必在 bin 目录中找到 .class 文件来检查它的字节码。

    编辑它们

    使用代码:

    • ASM:基于访问者,非常非常快。
    • BCEL:将字节码作为类文件的内存描述加载。
    • Javassit:最简单易用的一种,允许您进行模式匹配和表达式替换。

    手工:JBE

    【讨论】:

    • +1 我用过 BCEL 和 ASM,ASM 很简洁。它有一个访客可以反编译到已经存在的控制台中。我的意思是,它比 javap 更有能力。 Eclipse 插件摇滚。速度非常快!
    • 在 Mars 2 (4.5.2) 上安装失败 =( 它尝试了一些兼容性修复,但最终没有成功
    • 日食?也可以将 Intellij 用作 ASM 插件
    【解决方案4】:

    根据我的经验,jclasslib 是最好的字节码查看器之一。

    至于编辑器,有两种类型:字节码操作库和带有 GUI 的编辑器。这个问题在 SO 上被问过几次,您可以查看答案和提供的链接。

    请注意,编辑字节码并不像您想象的那么简单。 JVMS 对类文件的格式施加了许多限制,您的编辑很可能会违反其中之一。

    检查这些其他问题:

    Editing a .class file directly, playing around with opcodes

    Is it possible to view bytecode of Class file?

    Programming in Java bytecode

    【讨论】:

      【解决方案5】:

      尝试使用 -dirtyJOE -Java 整体编辑器是用于编译的 Java 二进制文件(.class 文件)的复杂编辑器和查看器。

      【讨论】:

        猜你喜欢
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 2012-06-23
        • 2011-05-27
        • 1970-01-01
        相关资源
        最近更新 更多