什么是 Java 字节码注入?
究竟什么是Java字节码注入,为什么会使用它?
Java 代码编译为字节码 ()。字节码注入是在运行时进行修改,以便在加载和运行之前将代码注入其中。Foo.java ->> Foo.class
Foo.class
想象一个场景,我想找出多少次方法
public void bar();
在 中调用。我可以使用在类加载期间拦截来编写代理,使用ASM对其进行修改,以便调用方法输入。Foo.class
java.lang.instrument
Foo.class
bar()
com.amir.agent.incrementCount()
现在我可以运行我的程序:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
而在运行时,不仅会做它正常工作,还会做我在每次被调用时定义的工作。Foo.class
MyAgent
bar()
有关从头开始编写代理的指针,请从此处开始。