有没有办法在 JVM 堆栈上交换长(或双)和参考值?
Is there a way to swap long (or double) and reference values on JVM stack?
假设我有以下字节码序列
aload 0 // this
lload 1
aload 3
为了这个问题,我们假设这些指令是由其他代码生成的,我无法控制它。
我需要交换堆栈中的最后两项,一个 long 和一个 reference。我不能用 swap
来做到这一点,因为 long
在堆栈上占用两个位置,而 swap
不关心那个。
加载 class 时我会得到这样的东西:
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
bytecode/generated/SomeClasName.someMethod(Ljava/lang/Object;)Z @18: swap
Reason:
Type long_2nd (current frame, stack[3]) is not assignable to category1 type
有没有办法在不求助于局部变量的情况下交换堆栈上的类别 1 和类别 2 类型?
假设我有以下字节码序列
aload 0 // this
lload 1
aload 3
为了这个问题,我们假设这些指令是由其他代码生成的,我无法控制它。
我需要交换堆栈中的最后两项,一个 long 和一个 reference。我不能用 swap
来做到这一点,因为 long
在堆栈上占用两个位置,而 swap
不关心那个。
加载 class 时我会得到这样的东西:
java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
bytecode/generated/SomeClasName.someMethod(Ljava/lang/Object;)Z @18: swap
Reason:
Type long_2nd (current frame, stack[3]) is not assignable to category1 type
有没有办法在不求助于局部变量的情况下交换堆栈上的类别 1 和类别 2 类型?