如果我没记错的话,似乎所有的控制流字节码都在Java中
喜欢
ifeq
goto
其他是直接跳转指令。
我的问题是,Java中是否有“间接跳转”指令?
如果没有,我如何使用JavaByte代码(如汇编语言)在Java中模拟“间接跳转”,我们可以这样做:
goto address; // we can only know address at runtime
谢谢
------------------更新--------------------------
基本上,我想做的是在运行时更改控制流,但是
在编译时,控制流字节码的目标是硬编码的,这似乎是不可能的。
最佳答案
间接跳转将使字节码验证程序失败。阅读有关如何验证类文件的信息(在JVM spec中),您将了解原因。
特别是,以下内容将无法验证:
所有控制流指令的目标都必须是指令的开始(不得跳入指令的中间)
无论VM如何到达该点,特定指令的堆栈必须保持一致(相同的高度和值的类型)。