我正在尝试使用 Krakatau 来组装通过 javap -c
获取的 native 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/