gpt4 book ai didi

Java 字节码 - 替换深层堆栈值的有效方式

转载 作者:行者123 更新时间:2023-11-29 08:50:21 25 4
gpt4 key购买 nike

这里是问题的简短版本:是否有一种有效的方法,通过字节码操作来替换 JVM 堆栈深处的值?为了帮助形象化,理想的解决方案在伪代码中看起来像这样:stack[offset] = new_value

查看 Jasmin 指令列表,似乎在堆栈中替换“深”值的唯一方法(实际上,只向下超过大约 4 个堆栈槽)如下:

  • 分配一个集合(例如数组或列表)
  • 将每个堆栈值存储到集合中,在过程中从堆栈中消耗每个值
  • 重复直到要替换的值位于栈顶
  • 弹出要替换的值
  • 插入新值(value)
  • 将集合中的值推回堆栈(当然是按照正确的顺序)

有没有更高效的方式?

请注意,假定使用局部变量太危险,因为此处的代码必须使用未知方法、未知类,而不管其局部变量定义如何,并且没有前提条件它可以更改方法的局部变量定义,或类的字段。

最佳答案

不,没有简单的方法可以做到这一点。操作数栈被设计成一个栈。

如果您能准确解释您要尝试做什么,也许我可以建议一种更好的方法。

关于Java 字节码 - 替换深层堆栈值的有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23039764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com