什么是Java字节码注入?
问题内容:
Java字节码注入到底是什么?为什么要使用它?
问题答案:
Java代码编译为字节码(Foo.java ->> Foo.class
)。字节码注入正在Foo.class
运行时进行修改,以在加载和运行之前立即将代码注入其中。
想象一个场景,我想找出多少次方法
public void bar();
在中被调用Foo.class
。我可以在类加载期间使用java.lang.instrument
该拦截器编写一个代理Foo.class
,然后使用ASM对其进行修改,以便bar()
调用com.amir.agent.incrementCount()
方法条目。
现在,我可以运行我的程序了:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
并且在运行时,Foo.class
不仅可以完成其正常工作,而且还可以完成我在MyAgent
每次bar()
调用时定义的工作。
有关从头开始编写代理的指示,请从此处开始。