0
我一直在尝试使用ASM java库进行检测,但是我无法找到一种方法来在构造函数中装入构造函数参数值并使用它们检索它们探头。我可以将方法描述((Ljava/lang/String; Ljava/lang/String;)V)添加到堆栈中,但是我需要这些参数的值使用ASM字节码工具在堆栈上加载构造函数参数
我一直在尝试使用ASM java库进行检测,但是我无法找到一种方法来在构造函数中装入构造函数参数值并使用它们检索它们探头。我可以将方法描述((Ljava/lang/String; Ljava/lang/String;)V)添加到堆栈中,但是我需要这些参数的值使用ASM字节码工具在堆栈上加载构造函数参数
您可以使用*LOAD
指令加载参数,使用MethodVisitor
的visitVarInsn
方法。例如,考虑这样的构造:
public Foo(int i, long l, int j) {}
您收到的值取决于第二个参数visitVarInsn(int opcode, int index)
方法:
0
是接收器本身(this
),和参数索引从1+long
和double
消耗tw ø局部变量插槽,因此下一个参数/局部变量的索引为2 + previous index
施加到例如,这产生
ALOAD 0
负载this
(或super
)ILOAD 1
负载i
参数LLOAD 2
加载l
参数ILOAD
4
加载j
参数