有没有一种Java类文件/字节码编辑器可以编辑指令?

36

是否有一个实用工具(或者Eclipse插件)可以编辑Java类文件? 我想在不重新编译也不需要完整构建路径的情况下操作Java类文件的字节码。

例如,重命名方法、添加/删除指令、更改常量等。

我找到的唯一工具是:

  • classeditor ,但它的功能非常有限 (例如,无法重命名内容和操纵指令)。

  • jbe 不会保存更改(也许因为类验证失败了--即使在我进行任何更改之前,该类运行得很完美)

    (jbe最初存在类路径问题,将类路径添加到jbe.bat文件中有所帮助)


jbe 有什么问题吗?它是Java,所以应该可以在任何地方运行。 - musiKk
抛出异常: Exception in thread "main" java.lang.NoClassDefFoundError: ee/ioc/cs/jbe/browser /BrowserApplication - MRalwasser
3
例外不等于崩溃。你遇到了类路径问题。 - Thorbjørn Ravn Andersen
1
如果我无法运行提供的入门示例,通常会放弃一个项目。如果那个都不能运行,那还有什么能运行呢? - Thorbjørn Ravn Andersen
1
可能是 Java 字节码编辑器? 的重复问题。 - Ciro Santilli OurBigBook.com
显示剩余2条评论
4个回答

25
我使用 reJ 直接编辑类文件。
它允许你编辑指令、方法、常量池、不同的类文件以及带有十六进制编辑器的分栏视图。
非常棒。

reJ似乎已经死了(最后一次发布是在2007年)。 - MRalwasser
如果编辑功能正常工作,reJ将会非常棒。我刚试图插入一个需要参数的“ifne”指令,但由于其图形用户界面未完成,无法传递预期的分支偏移量,因此出现了NullPointerException。实际上,我建议使用reJ来显示指令,使用Java反编译器来检查更改是否被理解,并使用纯十六进制编辑器来编辑类文件。 - gouessej
顺便说一句,JByteMod非常好用,它可以做到reJ无法做到的事情:https://grax.info/ 我已经用它来修补JOGL 2.3.2 :) - gouessej

10

我没有看到过任何字节码->字节码前端,但是有很多后端。

我建议你看看许多字节码操作库,例如javassist,它可以加载字节码,对其进行操作,并将其保存回磁盘,然后编写一个小的主函数来实现这一点。


9

我写了一个开源Java汇编器和反汇编器, 你可能会觉得有用。

它可以将类文件反汇编为易读的汇编语言,进行编辑,并重新组装为类文件。它最初是为编写混淆的破解程序而设计的,因此支持许多其他工具不支持的模糊功能。如果您需要任何当前不支持的功能,请随时与我联系,我会尽力满足您的需求。


3

你认为这个字节码操作/代码生成库列表有帮助吗?


1
我需要可用的工具,我没有时间自己编写这样的工具(也不会借助那些库来编写)。 - MRalwasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接