如果我没有错的话,似乎所有控制流字节码都是用Java编写的
喜欢
ifeq
goto还有一些是直接跳转指令。
我的问题是,Java中是否有“间接跳转”指令?
如果不是,我如何使用JavaByte代码模拟Java中的“间接跳转”,比如在程序集中,我们可以这样做:
goto address; // we can only know address at runtime谢谢
基本上,我要做的是在运行时更改我的控制流,但是由于控制流字节码的目标在编译时是硬编码的,所以似乎不可能。
发布于 2013-10-22 20:34:20
间接跳转将使字节码验证器失败。了解如何验证类文件(在JVM规范中),您将看到其中的原因。
具体而言,无法核实以下情况:
发布于 2013-10-22 19:51:09
编辑:完全错误地回答了这个问题。(见下文)
JVM支持字节码级别的goto。你只需要像
BCEL
原始答案,在goto上的源代码:
最初,Java有goto语句,但后来的版本没有。我认为可能的原因可能是goto是不必要的,可以用更易读的语句来代替它。
goto关键字存在,但它没有实现。
通过詹姆斯·高斯林查看这个有趣的视频
发布于 2013-10-22 19:50:55
根据您的定义,任何形式的方法调用都是“间接跳转”。
https://stackoverflow.com/questions/19526967
复制相似问题