如何使用 ASM 字节码查看或访问方法参数值或对象?
问问题
2530 次
2 回答
1
方法参数是前几个局部变量。要访问第一个参数,字节码助记符看起来像aload_0
oriload_0
或lload_0
等,具体取决于参数的类型。对于第四个之后的论点,你会说aload 4
等等。
请注意,实例方法的第一个参数是对this
. 所以第一个参数将是本地#1,你会得到它,aload_1
等等。
但是,您会使用 ASM 的东西生成字节码……这样做。看起来你会说类似的东西mv.visitVarInsn(ALOAD, 0);
,mv
你的 MethodVisitor 在哪里。将0
替换为局部变量索引。
于 2013-02-15T04:52:53.453 回答
1
考虑到方法参数类型,您可以执行以下操作:
int off = (access | Opcodes.ACC_STATIC) == 0 ? 0 : 1;
int opcode = Type.getArgumentTypes(desc)[param + off].getOpcode(Opcodes.IALOAD);
mv.visitVarIns(opcode, param);
...
其中param
是方法参数编号,access
并且是您从ClassVisitor.html#visitMethoddesc
的相应参数中获得的值。
于 2013-02-26T03:39:28.703 回答