【问题标题】:What is the number after "GOTO" in Java bytecode?Java字节码中“GOTO”后面的数字是多少?
【发布时间】:2017-12-21 09:38:37
【问题描述】:

Java 版本:1.8.0_73-b02 64bit

为什么命令GOTO 10的字节码是A7 FF F7?
是A7对应goto,FF F7对应10吗?

为什么A7 FF F7 是GOTO 10?

【问题讨论】:

  • 您是否考虑过咨询documentation?
  • 0xFFF7 对应于-10,而不是10。
  • @Kayaman 哦!这是类查看器的错误吗?
  • 好吧,我不知道。据我所知,这可能是你眼中的一个错误。
  • @Kayaman:实际上,FFF7 对应于-9,查看器正确显示10,因为它将相对位置转换为绝对位置19 -9 == 10。通过查看位于25 位置的下一个goto 更容易识别。它是A7 FF E9,偏移量为-23,显示为2,为25 -23 == 2...

标签: java jvm bytecode goto


【解决方案1】:

这两个字节标识下一条预期指令的内存地址。看看这个bytecode listing中对GOTO的描述:

在 branchoffset 处转到另一条指令(由无符号字节 branchbyte1

或者,在official javadoc这里查看

无符号字节branchbyte1和branchbyte2用于构造一个有符号的16位branchoffset,其中branchoffset为(branchbyte1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多