我正在尝试使用Krakatau汇编由javap -c
获取的本机Java字节码,但出现一个奇怪的错误:
> python Krakatau/assemble.py Main.bc
Krakatau Copyright (C) 2012-17 Robert Grosse
This program is provided as open source under the GNU General Public License.
See LICENSE.TXT for more details.
Processing file Main.bc, 1/1 remaining
Main.bc:1:1: error: Expected '.class' or '.version'.
Compiled from "Main.java"
我已经检查了项目GitHub存储库上的所有内容,但似乎没有任何帮助。当我使用汇编程序时,如何期望.class文件?我的字节码应该采用Jasmin语法的某种形式吗?
最佳答案
javap
的输出无法重组。它旨在帮助Java程序员调试其代码,并且不完整也不是机器可读的。
Krakatau使用基于Jasmin语法的汇编格式。 Krakatau同时包含一个汇编程序和一个反汇编程序,因此您可以使用Krakatau汇编程序将一个类文件反汇编为文本汇编文件,然后将其重新组合为一个类文件。
附带说明,javap
缺少许多功能,并在输出中隐藏了内容。这对于快速检查很有用,但是如果您真的想以较低的级别查看类文件中的内容,则无论如何都需要使用Krakatau。
关于java - 使用Krakatau将Java字节码重新组装为.class文件时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47234101/