我正在使用 IJVM 并尝试使用 GOTO 指令使用局部变量代替静态偏移量(或标签)。它行不通。我想它只是将变量名称视为标签并尝试分支到它,但不存在这样的标签。有什么方法可以强制它读取变量的内容(包含偏移量)或其他解决方案?
提前致谢。
出于安全原因,JVM 字节码不允许您根据变量的内容跳转到任意指令。这种限制使得 JVM 可以通过特定方法静态枚举所有控制路径来验证字节码的各种安全属性。如果你能够跳转到任何地方,静态分析器就无法证明所有必要的程序不变量都成立。
如果您确实需要跳转到任意索引,请考虑查看tableswitch
orlookupswitch
指令,它可以让您提前枚举可能的目的地。这并不完全是您要寻找的东西,但据我所知,您尝试进行的那种任意跳转在 JVM 字节码中是不可能的。
希望这可以帮助!
GOTO 指令在 MIC1 中实现。它将操作码后的 2 个字节解释为指令开始时到 PC 的偏移量。
我认为分配必须要求您在 MIC1 中编写一个新的 GOTO,它将操作码之后的字节解释为包含分支偏移量的局部变量的偏移量。