以下是问题的简短版本:是否有一种有效的方法,使用字节码操作来替换JVM堆栈上的深层值?为了帮助可视化,理想的解决方案在伪代码中看起来像这样:stack[offset] = new_value
。
查看Jasmin指令列表,似乎是替换值的唯一方法" deep"在堆栈上(实际上,只有大约4个以上的堆栈槽)如下:
是否有更有效的方式?
请注意,假设使用局部变量太危险,因为此处的代码必须使用未知类的未知方法,无论其局部变量定义如何,并且没有前提条件它可以更改方法的局部变量定义,或类的字段。
答案 0 :(得分:0)
不,没有简单的方法可以做到这一点。操作数堆栈设计为堆栈。
如果你能解释一下你究竟想做什么,也许我可以建议一个更好的方法去做。
答案 1 :(得分:0)
使用LocalVariablesSorter中的ASM bytecode manipulation framework,您可以自由地引入新的局部变量,并透明地重新映射现有变量。 ASM User Guide中有一些示例。