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

标签 java jvm bytecode .class-file

我正在尝试使用 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/

相关文章:

java - 读取class文件并替换class文件的内容

java - 为什么编译的 Java 类文件比 C 编译的文件小?

java - 如何在 Kotlin 中实例化一个抽象类?

java - Android 运行时字节码操作

静态方法的Java实例变量

java - Java版本和JVM的区别到底在哪里?

javascript - Java Nashorn 实例方法

java - 如何在 Java 中使用 RUDP 创建一个简单的服务器客户端应用程序?

java - 有没有办法在mat中使用OQL获取无法访问的对象?

java - 在运行时创建 Pojo 并将其保存在磁盘上?