如何重新组合javap生成的java字节码?

时间:2013-11-04 16:58:02

标签: java bytecode decompiling disassembly

我希望能够编辑字节码并重新编译成可执行的类文件。我不知道该怎么做。我尝试用javap -c和-v反编译,编辑一些东西,并将其更改回我的类文件,但是我收到错误“错误:无法找到或加载主类Test.class”。我还想从字节码生成java源代码。有帮助吗?我想在不使用外部程序的情况下自己做。如果可能的话,我想自己做。

3 个答案:

答案 0 :(得分:4)

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

  1. 使用第三方汇编程序格式的第三方工具。
  2. 编写自己的工具(dis)组装第三方汇编程序格式。
  3. 编写自己的使用自己的汇编程序格式的工具。
  4. 我会看看SootKrakatau,两者都具有完整(dis)组装功能。 Soot支持少量字节码的中间表示。我相信,Krakatau使用基于流行的Jasmin的表示(尽管该工具本身是用Python编写的)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

您可以在字节码汇编程序的帮助下使用汇编程序等字节码。看看Jasmin:http://jasmin.sourceforge.net/(语法与javap的输出完全不同)。