java - 解释JVM方法调用指令

标签 java jvm instructions

我理解下面的指令意味着已经发生了方法调用:

invokestatic:indexbyte1=00 indexbyte2=02 

我的理解是,要找到被调用的方法在常量池中的索引,进行位移操作:

00 << 8 + 02

这等于零,这不是常量池索引中的有效条目。我是否误解了所需的计算?

我想了解这是如何手动完成的,因此反编译器将无济于事。

最佳答案

该指数的计算方式不是00 << 8 + 02 。引用the standard :

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2.

这意味着指令 invokevirtual 00 02将调用 methodref 位于索引 (00 << 8) | 02 的方法在常量池中,即位置 2。请记住,常量池中的第一个条目的索引为 1,因此索引 2 实际上指的是池中的第二个条目。

关于java - 解释JVM方法调用指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527693/

相关文章:

java - 从外部应用程序的屏幕获取数据

java - Android 应用程序创建两次

java - 在 Maven 子项目中需要相同依赖项的不同版本

java - 然而Eclipse错误: Incompatible JVM,,无法更新JVM

java - 可见性和 javac/JVM 内联

java - Cassandra 3.11.6 无法启动 Windows 10

java - 关于 JVM 信号处理

language-agnostic - 我如何在运行时生成和执行机器代码?

assembly - "muli"是 MIPS 指令吗?它是在哪里定义的?