4

我希望能够编辑字节码并重新编译成可执行的类文件。我不知道该怎么做。我尝试使用 javap -c 和 -v 进行反编译,编辑某些内容,然后将其更改回我的 Class 文件,但出现错误“错误:无法找到或加载主类 Test.class”。我还想从字节码生成 java 源代码。有什么帮助吗?我想自己做这件事而不使用外部程序。如果可能的话,我想自己做。

4

3 回答 3

5

的输出javap不适合汇编程序的输入。如果要反汇编和重新组装 Java 字节码,则需要执行以下操作之一:

  1. 使用具有第三方汇编器格式的第三方工具。
  2. 编写您自己的工具来(反)汇编第三方汇编器格式。
  3. 编写您自己的工具,使用您自己的汇编格式。

我会看看SootKrakatau,它们都具有完整的(拆卸)组装能力。Soot 支持少数字节码的中间表示。我相信 Krakatau 使用基于流行的 Jasmin 的表示(尽管该工具本身是用 Python 编写的)。

于 2013-11-04T17:36:39.350 回答
2

Java 平台(如在 JDK 中)不提供将字节码源编译为类文件的工具(它甚至没有在 JLS 中真正指定汇编器语法)。

您可以在字节码汇编器的帮助下使用像汇编器一样的字节码。看看 Jasmin: http: //jasmin.sourceforge.net/(虽然语法与 javap 的输出并不完全相同)。

于 2013-11-04T17:11:52.263 回答
1

Javassist(Java 编程助手)是 Java 的加载时反射系统。它是一个用于在 Java 中编辑字节码的类库;它使 Java 程序能够在运行时定义一个新类,并在 JVM 加载它之前修改一个类文件。 http://java-source.net/open-source/bytecode-libraries

于 2013-11-04T17:03:53.500 回答