【问题标题】:Java ASM Bytecode Manipulation - How to inject in middle of method?Java ASM 字节码操作 - 如何在方法中间注入?
【发布时间】:2020-02-24 19:21:22
【问题描述】:

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

示例:

public void exampleMethod() {
    doOneThing();
    doSomeMoreStuff();

    if (someCondition) {
        doEvenMoreThings();
    }

    callMyInjectedMethodHere(); // This call has been injected

    if (someOtherCondition) {
        doRandomStuff();
    }

    doStuff();
}

【问题讨论】:

  • 第一步是找到“我想要它去哪里”的精确定义。

标签: java methods bytecode inject java-bytecode-asm


【解决方案1】:

ASM 有一个访问者和一个树形 API,它允许您逐条处理方法的字节码指令。您需要做的是访问所有指令,在您的情况下是两个方法调用、一个分支指令、一个方法调用和一个作为前一个分支目标的标签,然后发出一个额外的方法调用指令。这样就可以修改方法了。

但是请注意,方法主体通常比签名更改得更快,并且此类注入往往非常脆弱。如果可以避免,请避免。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多