是否可以查看 Class 文件的字节码? [复制]

Posted

技术标签:

【中文标题】是否可以查看 Class 文件的字节码? [复制]【英文标题】:Is it possible to view bytecode of Class file? [duplicate] 【发布时间】: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 进程,它可以在这个进程中委托给类加载器,而不必覆盖它。如果您实现自己的类加载器,您可以将字节码加载到一个类中。但是,如果您从一个类开始,您就不能将其转换为字节码以传送到外部进程。我的需要是在运行时获取它——而不是出于好奇而查看/修改它。 【参考方案1】:

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

javap -c com.mypackage.MyClass

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

【讨论】:

默认不包括私有方法。使用-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 文件)的复杂编辑器和查看器。

【讨论】:

以上是关于是否可以查看 Class 文件的字节码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用 javap 命令查看 Java Class 文件的字节码内容

IDEA查看字节码

如何查看class字节码文件

字节码引用检测原理与实战

idea字节码插件JClassLib深入解读JVM字节码

JVM字节码