我正在使用 ASM 开发 Java 检测引擎,并且存在评估堆栈顶部具有特定值的情况,我想在现有value之前插入一个ref(这是getstatic的结果) 。即考虑只有一个值的堆栈: ,然后在getstatic我希望堆栈变成这样: 。value ->
ref, value ->
要执行此行为,我必须插入以下字节码:getsatic和swap。使用 ASM,我会做类似的事情(考虑mv
类型MethodVisitor
):
mv.visitFieldInsn(Opcodes.GETSTATIC, ...);
mv.visitInsn(Opcodes.SWAP);
问题是交换字节码不支持long
和double
值。所以上面的代码对于单字类型是可以的,但是对于long
和double
类型就不行了。
是否有任何简单的解决方案来解决long
和double
类型的这个问题并且不需要辅助本地值?