Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以查看类文件的字节码?_Java_Bytecode_Bytecode Manipulation - Fatal编程技术网

Java 是否可以查看类文件的字节码?

Java 是否可以查看类文件的字节码?,java,bytecode,bytecode-manipulation,Java,Bytecode,Bytecode Manipulation,可能重复: Java源代码被编译成字节码,字节码实际上在类文件中。是否可以查看已编译类的字节码 如果可能,是否可以对其进行编辑 是否有eclipse插件可供使用?JDK附带了一个工具,用于反汇编类文件中的字节码。可以在字节码级别进行编辑。看一看,一个java库,设计用于读取、操作和编写类文件 可在上找到用于编辑字节码的工具和库的列表。例如,甚至带有GUI的Java字节码编辑器。是。您可以使用JDK附带的javap命令查看类的字节码。例如: javap-c com.mypackage.MyCla

可能重复:

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

如果可能,是否可以对其进行编辑

是否有eclipse插件可供使用?

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


可在上找到用于编辑字节码的工具和库的列表。例如,甚至带有GUI的Java字节码编辑器。

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


javap-c com.mypackage.MyClass
例如,有几个库和工具可以帮助您使用Java字节码。

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

至于编辑器,有两种类型:字节码操作库和带有GUI的编辑器。这个问题已经被问过几次了,所以你可以检查答案和提供的链接

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

检查以下其他问题:


查看字节码

忘记javap吧!我用过的最好的插件是

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

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

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

编辑它们

使用代码:

  • ASM:以访客为基础,非常非常快
  • BCEL:加载字节码作为类文件的内存描述
  • Javassit:最容易使用的,允许您进行模式匹配和表达式替换

手动:JBE

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

查看Java字节码编辑器。您需要解决的基本问题是什么?我还对@Thorbjørn的问题感兴趣@阿披实你在班级档案中寻找什么信息?还是出于好奇?我发现了一个网站,它允许你输入java代码,并将字节码作为输出。我需要创建一个分叉的java进程,它可以在这个进程中委托给类加载器,而不必重写它。如果实现自己的类加载器,就可以将字节码加载到类中。但是,如果您从一个类开始,您就不能将它转换为字节码以传送到外部进程。我需要的是在运行时获取它,而不是出于好奇而查看/修改它。+1我使用过BCEL和ASM,ASM很整洁。它已经有一个访问者要反编译到控制台中。我的意思是,它比javap更有能力。Eclipse插件运行良好。非常快!在Mars 2(4.5.2)上的安装失败=(它尝试了一些兼容性修复,但最终不起作用Eclipse?尝试Intellij It作为ASM插件,默认的私有方法不包括在内。使用
-p
也包括它们。对我来说,只使用文件名(扩展名似乎是可选的),但不是完全限定的类名:
javap-c-pmyclass.class
javap-c com.mypackage.MyClass
将在终端(stdout)上打印代码。我更喜欢
javap-c-p com.mypackage.MyClass>>com.mypackage.MyClass
在文件中查看代码。