什么是 Java 字节码注入?

2022-09-01 20:57:24

究竟什么是Java字节码注入,为什么会使用它?


答案 1

Java 代码编译为字节码 ()。字节码注入是在运行时进行修改,以便在加载和运行之前将代码注入其中。Foo.java ->> Foo.classFoo.class

想象一个场景,我想找出多少次方法

public void bar();

在 中调用。我可以使用在类加载期间拦截来编写代理,使用ASM对其进行修改,以便调用方法输入。Foo.classjava.lang.instrumentFoo.classbar()com.amir.agent.incrementCount()

现在我可以运行我的程序:

$java -javagent:MyAgent Foo  //assuming Foo has a main() defined

而在运行时,不仅会做它正常工作,还会做我在每次被调用时定义的工作。Foo.classMyAgentbar()

有关从头开始编写代理的指针,请从此处开始


答案 2

第一个谷歌搜索给出了一个有趣的阅读Java编程:字节码注入


推荐