Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        6个月前关闭。
                                                                                            
                
        
我想更改在运行时加载的类的功能(它具有错误,但是项目早已消失,所以我无法构建二进制文件)。我要做的是编写一段代码,该代码将在应用程序初始化阶段运行,并对此函数进行更改,以使其正常工作。只需保留该代码,直到替换完成即可。

没有修改字节码的经验,我可以在运行时使用哪个库来修改和重新加载类?具体来说,我需要用noop指令替换一个throw指令(我曾经使用十六进制编辑器执行过一次,但是丢失了二进制文件)。

另外,如果您知道有关如何进行此类操作的任何教程,请分享。

我可以看到很多图书馆这样做,但我不知道哪个图书馆好/不好做...

最佳答案

我认为使用Java Attach API。 Java Attach API是将Java代理加载到已经运行的JVM中的过程。您可以通过阅读Java Instrument javadoc来了解javaagents的工作。 AgentMain为您提供帮助。


  在应用程序已经运行之后启动代理程序时,将调用Agentmain。可以使用Sun工具API以编程方式附加以agentmain开头的代理(仅适用于Sun / Oracle JVM-引入动态代理的方法取决于实现)。


This tutorial对于Java工具很有用。

关于java - 现有已加载类的字节码修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56626847/

10-12 00:10
查看更多