如果在方法中准确的访问局部变量的index

本篇不是正文,只是简单记录一下感想,比较短。

通常使用ASM 在方法中插入方法调用的时候,会拦截visitMethod方法,然后覆盖visitMethodInsn方法,在这个方法中,假设要实现一个插入的操作。

这个操作呢,恰好用到了所插入方法的前一个操作的结果或者参数!怎么办!

我们知道,局部变量的需要一般是 P0、arg1、arg2.。。。。
这里P0 代表当前class对象,它的局部变量编号固定为0
arg1代表方法方法中第一个参数,它的局部变量编号为1
arg2.。。。以此类推

但是呢,我们的方法内部有很多代码,我们如何做到精确的访问我们想访问的本地变量呢?

这个时候,nextLocal 就起到了作用,它代表当前所处位置的下一个寄存器位置,对应的还有一个叫做 firstLoacal变量。。。
然后loadLocal(index)

找到了位置,怎么用不用我说了吧!

欢迎留言!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容