使用 Krakatau 将 Java 字节码重新组装成 .class 文件时出错

Error reassembling Java bytecode into .class file using Krakatau

我正在尝试使用 Krakatau assemble 原生 Java 字节码,通过 javap -c 获取,但我遇到了一个奇怪的错误:

> 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 存储库中的所有内容,但似乎无济于事。当我使用 assembler 时,如何期待 .class 文件?我的字节码应该采用某种形式的 Jasmin 语法吗?

Krakatau 文档中没有任何内容说它旨在转换 javap -c 的输出。

如果你想使用 Krakatau 转换字节码文件,你应该使用 Krakatau 进行反汇编步骤而不是 javap -c

Krakatua README.txt 文件解释了如何做到这一点。

javap 的输出无法重新组合。它旨在帮助 Java 程序员调试他们的代码,但并不完整或机器可读。

Krakatau 使用基于 Jasmin 语法的汇编格式。 Krakatau 同时包含一个汇编器和一个反汇编器,因此您可以使用 Krakatau 反汇编器将类文件反汇编为文本汇编文件,然后将其重新组合为类文件。

附带说明一下,javap 缺少很多功能并隐藏了输出中的内容。它对于快速检查很有用,但如果你真的想在低级别查看类文件中的内容,无论如何你都需要使用 Krakatau。