使用Java ASM删除方法

4
我正在尝试使用Java ASM库,经过一番研究后,我发现了一个问题。我想要制作一个应用程序,实现以下功能:
  • 从外部Jar文件中读取类
  • 从指定的类完全删除某些方法
  • 将修改后的类的已编译字节码或已编译类内容打印到控制台或存储,例如new String(cw.toByteArray()),其中cw是ClassWriter的实例(类似于您使用记事本编辑类文件时所看到的)
我已经能够读取字节码和已编译类的内容,但无法删除方法。我无法找到任何有效的代码,只有一些部分代码,并且很少解释如何实现它。

1
new String(cw.toByteArray()) 没有任何意义。 - Holger
为什么不使用Textifier而不是new String(cw.toByteArray())来查看内容呢?它以漂亮的格式打印出给定类的字节码,使阅读类变得更加容易。 - Display Name
1个回答

3
你可以实现一个ClassVisitor,覆盖visitMethod方法并在发现特定模式时从该方法返回null而不调用super.visitMethod
这样,相应的方法将被跳过,并且不会添加到创建的类文件中。

抱歉回复晚了,但我该如何使用这样的类并保留其相同的类数据?在我阅读类的字节码后,它读取的是相同的内容。 - RubbaBoy
你需要将它写回磁盘。 - Rafael Winterhalter
我该如何开始做这件事呢?(抱歉,我对汇编语言有点小白)还有没有关于我想要完成的内容的好教程? - RubbaBoy
从一个类编写器中,您可以获取作为类文件的字节数组。将其写回到其根位置。 - Rafael Winterhalter

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