如果我没记错的话,似乎所有的控制流字节码都在Java中

喜欢

ifeq
goto


其他是直接跳转指令。

我的问题是,Java中是否有“间接跳转”指令?

如果没有,我如何使用JavaByte代码(如汇编语言)在Java中模拟“间接跳转”,我们可以这样做:

goto address;  // we can only know address at runtime


谢谢

------------------更新--------------------------

基本上,我想做的是在运行时更改控制流,但是
在编译时,控制流字节码的目标是硬编码的,这似乎是不可能的。

最佳答案

间接跳转将使字节码验证程序失败。阅读有关如何验证类文件的信息(在JVM spec中),您将了解原因。

特别是,以下内容将无法验证:


所有控制流指令的目标都必须是指令的开始(不得跳入指令的中间)
无论VM如何到达该点,特定指令的堆栈必须保持一致(相同的高度和值的类型)。

08-16 11:06