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