Mig*_*boa 3 java jvm java-bytecode-asm
我正在开发一个带有 ASM 的 Java 检测引擎,有一种情况是评估堆栈在顶部有一个特定的值,我想在现有值之前插入一个ref(这是getstatic的结果)。即考虑只有一个值的堆栈: ,然后在getstatic 之后我希望堆栈变成这样:。value ->ref, value ->
要执行此行为,我必须插入以下字节码:getsatic和swap。使用 ASM 我会做类似的事情(考虑mv类型MethodVisitor):
mv.visitFieldInsn(Opcodes.GETSTATIC, ...);
mv.visitInsn(Opcodes.SWAP);
Run Code Online (Sandbox Code Playgroud)
问题是交换字节码不支持long和double值。所以上面的代码适用于单个单词类型,但它不适用于long和double类型。
是否有任何简单的解决方案可以解决long和double类型的问题并且不需要辅助本地值?
我们有一个双字值 VV 和参考值 R。要从 VV... 到 VVR...,您可以将 R 值添加到堆栈顶部 (RVV...),然后使用 dup_x2 (RVVR.. .) 然后弹出 (VVR...)。
| 归档时间: |
|
| 查看次数: |
1880 次 |
| 最近记录: |