如何通过ASM复制JVM堆栈中方法的参数?

问题描述 投票:0回答:1

我正在使用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

bytecode java-bytecode-asm
1个回答
0
投票

如果只有一个参数,或者只有两个不是长整型或双精度型的参数,则可以分别使用DUPDUP2指令。如果有两个以上的参数,则无法使用字节码直接复制它们。相反,您需要将它们保存到局部变量,然后再读回它们。

© www.soinside.com 2019 - 2024. All rights reserved.