ASM
asm(汇编) assembly language
image.png

AM学习路径指南
1.理解Cass结构
2.理解掌握JVM指令码执行过程
3.理解操作数栈原理
4.理解局部变量
表二、 Class字节码与JVM指令码的关系

ASM 设计模式

ASM 内部采用访问者模式将 .class 类文件的内容从头到尾扫描一遍,每次扫描劉类文件相应的内容时,都会调用 ClassVisitor 内部相应的方法。比如

  1. 扫描到类文件时,会回调 ClassVisitor#visit() 方法;
  2. 扫描到类注解时,会回调 ClassVisitor#visitAnnotation() 方法
  3. 扫描到类成员时,会回调 ClassVisitor#visitField() 方法
  4. 扫描到类方法时,会回调 ClassVisitor#visitMethod() 方法
  5. 扫描到相应结构内容时,会回调相应方法,该方法会返回一个对应的字书码操作对象(比如, visitMethod()返回 MethodVisitor 实例),通过修改这个对象,就可以修改 class 文件相应结构部分内容,最后将这个 ClassVisitor 字书码内容覆盖原来 class 文件就实现了类文件的代码切入。 | 树形关系 | 使用的接口 | | —- | —- | | Class | ClassVisitor | | Field | FieldVistor | | Method | MethodVistor | | Annotation | AnnotationVistor |

基于 ASM 读取 Class 结构
基于 ASM 写入 Class 结构
基于 ASM 编辑字节码