我可以编写字节码(使用asm lib)来检查并修改线程的所有方法调用的堆栈帧吗?
答案 0 :(得分:3)
使用JDI(Java调试接口),可以查看线程的堆栈帧。 StackFrame的documentation给出了方法setValue,它允许您更改堆栈帧中局部变量的值。
此外,类ThreadReference有一个popFrames方法,允许您从堆栈中删除帧。
我认为直接使用字节码不会允许您对堆栈帧进行任何进一步修改,因为这些是JVM的内部细节,字节码无法直接更改。特别是,我认为不可能创建新的堆栈帧并将它们添加到一个线程中(虽然这是我当然有兴趣找到的东西!)。
希望这会有所帮助,可能会有更多有用的方法隐藏在JDI文档中。
答案 1 :(得分:1)
没有。如果例如Java支持的嵌套方法,则需要这样的指令,但它不会(不像Pascal那样,因此在p代码中需要这样的指令)。