1

1、修改字节码

第一步要用的工具有ASM、javassist、cglib(基于ASM),用来修改字节码。

2、加载新的字节码

第二步,自定义ClassLoader来加载修改后的字节码

3、替换原来的字节码

或者替换掉原来的字节码,这里主要有两种技术:
1、在JVM加载用户的Class时,拦截,返回修改后的字节码
2、在运行时,使用Instrumentation.redefineClasses方法来替换掉原来的字节码,和这个类相关的实例立即生效。

都需要agent外挂在启动时
java -javaagent:xxxtransformer.jar xxxclass
或者运行时通过VirtualMachine.attach和VirtualMachine.loadAgent把agent attach到pid上


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...