ASM字节码操作 - istore和istore_ <n> </n>

时间:2014-10-06 21:37:23

标签: java jvm bytecode java-bytecode-asm

正如documentation所说:

  

公共接口操作码

     

定义JVM操作码,访问标志和   数组类型代码。 此接口未定义所有JVM操作码   因为某些操作码是自动处理的。例如,xLOAD   xSTORE操作码自动替换为xLOAD_n和xSTORE_n   尽可能使用操作码。因此,xLOAD_n和xSTORE_n操作码   未在此界面中定义。同样对于LDC,自动   必要时由LDC_W或LDC2_W替换,WIDE,GOTO_W和JSR_W。

问题:

如果我有两个几乎相同的.class文件 - 一个使用istore_<n>,一个istore带有显式操作数。 Asm总是告诉(ClassReader和ClassVisitor)有istore带有显式操作数。我想使用asm,但我需要了解这些差异。 asm可以获得任何指令的实际操作码吗?

1 个答案:

答案 0 :(得分:1)

ASM的ClassWriter将使用最有效的ISTORE操作码。如果输出ISTORE 1,ASM将输出ISTORE_1。

因此,ClassReader将解构&#34;将操作码转换为隐藏其原始形式的通用形式。假设ISTORE 1最初是ISTORE_1通常是安全的,但是在其他情况下ASM会丢失原始字节码的实际形式。如果要按原样检查原始字节码,可能需要使用javassist。