Java ASM字节码操作-如何在方法中间注入



使用ASM,如何将方法准确地注入到我想要的位置?

示例:

public void exampleMethod() {
doOneThing();
doSomeMoreStuff();
if (someCondition) {
doEvenMoreThings();
}
callMyInjectedMethodHere(); // This call has been injected
if (someOtherCondition) {
doRandomStuff();
}
doStuff();
}

ASM有一个访问者和一个树API,它允许您逐个指令处理方法的字节码指令。您需要做的是访问所有指令,在您的情况下是两个方法调用、一个分支指令、一个方法调用和上一个分支的目标标签,然后发送一个额外的方法调用指令。通过这种方式,您可以修改方法。

然而,请注意,方法体的变化通常比签名更快,而且这种注射往往非常脆弱。如果你能避开它,就避开它。

最新更新