本篇不是正文,只是简单记录一下感想,比较短。
通常使用ASM 在方法中插入方法调用的时候,会拦截visitMethod方法,然后覆盖visitMethodInsn方法,在这个方法中,假设要实现一个插入的操作。
这个操作呢,恰好用到了所插入方法的前一个操作的结果或者参数!怎么办!
我们知道,局部变量的需要一般是 P0、arg1、arg2.。。。。
这里P0 代表当前class对象,它的局部变量编号固定为0
arg1代表方法方法中第一个参数,它的局部变量编号为1
arg2.。。。以此类推
但是呢,我们的方法内部有很多代码,我们如何做到精确的访问我们想访问的本地变量呢?
这个时候,nextLocal 就起到了作用,它代表当前所处位置的下一个寄存器位置,对应的还有一个叫做 firstLoacal变量。。。
然后loadLocal(index)
找到了位置,怎么用不用我说了吧!
欢迎留言!