我正在使用ASM在特殊方法之后插入一个方法。例如,一种方法如下:
a.doSomeThing(p1, p2, p3, p4, p5, p6)
我想在其后插入一个方法,就像这样:
a.doSomeThing(p1, p2, p3, p4, p5, p6)
MyClass.myMethod(a, p1, p2, p3, p4, p5, p6) //insert a static method
insert方法的参数与上一个参数相同。
我知道,当invokevirtual doSomeThing
时,这些值位于堆栈的顶部。如何复制它们,并将其用于myMethod
?
如果只有一个参数,或者只有两个不是长整型或双精度型的参数,则可以分别使用DUP
或DUP2
指令。如果有两个以上的参数,则无法使用字节码直接复制它们。相反,您需要将它们保存到局部变量,然后再读回它们。