我想更改在运行时加载的类的功能(它具有错误,但项目早已消失,所以我无法构建二进制文件)。我要做的是编写一段代码,该代码将在应用程序初始化阶段运行,并对这个函数进行更改,以使其正常工作。只需保留该代码,直到替换完成即可。
没有字节码修改经验,我可以使用哪个库在运行时修改和重新加载类?具体来说,我需要用noop指令替换throw指令(我曾经使用十六进制编辑器执行过一次,但是丢失了二进制文件)。
此外,如果您知道有关如何进行此类操作的任何教程,请分享。
我可以看到很多这样做的库,但是我不知道哪个是好/坏的。
答案 0 :(得分:2)
我认为使用Java Attach API。 Java Attach API是将Java代理加载到已经运行的JVM中的过程。您可以通过阅读Java Instrument javadoc来了解javaagents的工作。 AgentMain会为您提供帮助。
在应用程序已经运行之后启动代理时,将调用Agentmain。可以使用Sun工具API以编程方式附加以agentmain开头的代理(仅适用于Sun / Oracle JVM,引入动态代理的方法取决于实现)。
This tutorial对于Java工具很有用。