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