【发布时间】:2014-02-19 23:45:45
【问题描述】:
JVM 如何确保跳转指令(jsr 和 goto)跳转到指令而不是数据或指令参数?
【问题讨论】:
JVM 如何确保跳转指令(jsr 和 goto)跳转到指令而不是数据或指令参数?
【问题讨论】:
这是字节码验证器的一部分。
在 Java 字节码中,指令都具有已知长度,并且必须从偏移量 0 开始一个接一个地出现,因此您始终可以静态地判断每条指令的开头在哪里。因此,只需确保跳转目标是有效指令的开头即可。与 Dalvik 或 x86 不同,您不能跳到指令的中间。
You can find the source code for the verifier here.实际上有两个验证者。这是经典的验证器,用于没有 StackMapTable 的代码(包括所有包含 jsr 的代码)。
【讨论】: