gpt4 book ai didi

java - Java字节码指令组合对操作数栈的影响

转载 作者:行者123 更新时间:2023-11-30 09:24:52 25 4
gpt4 key购买 nike

对于使用 ASM 手工编写的 Java 字节码指令序列,有没有办法访问堆栈的状态?例如,对于如下组合:

ILOAD_0,ILOAD_1,IADD,DUP -> 1,1

这里的动机是编写测试代码来验证给定的指令集是否会导致给定的堆栈,例如

assert getCurrentStackLength() == 2

assert getTopElement() == (int) 1

等等。

最佳答案

堆栈是 JVM 的内部细节,实际上可能并不存在。

典型的 JVM 有两种操作模式——解释和 JIT 编译。 Interpertation 实际上模拟了堆栈和局部变量。 JIT 编译将所有内容编译为机器代码,因此不存在操作数堆栈或局部变量表之类的东西。

基本上,您要做的就是查看您的 JVM 代码,找到一种方法强制它始终解释您的代码,添加调试代码以打印出堆栈等,然后重新编译并重建所有内容.显然这不是胆小者的任务。

然而,更大的问题是您为什么要这样做。你在尝试对 JVM 进行单元测试吗?您编写的任何代码都比您正在测试的代码更容易出现错误。

如果您只想找出字节码中特定点的堆栈和局部状态,那么您只需要一个静态 validator 。那里有很多。我写了one that's on Github如果你有兴趣。

关于java - Java字节码指令组合对操作数栈的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15504629/

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