1、启动流程
1、启动时首先会进入 javaagent 的 premain 函数,该函数会在 main 函数之前预先执行。<br><br>
2、初始化字节码转换模块给load class 操作进行插桩操作,当类加载的时候会先进入 agent 进行处理hook指定函数
2、启动后hook流程
简述上述两张图的流程:<br>1、.因为启动时候进行了插桩操作,当有类被 ClassLoader 加载时候,所以会把该类的字节码先交给自定义的 Transformer 处理
2、自定义 Transformer 会判断该类是否为<font color="#ff9800">需要 hook 的类</font>,如果需要会将该类交给ASM字节码处理框架进行处理。
3、ASM框架会将<font color="#f57c00">类</font>的字节码依照事件驱动模型逐步<font color="#ff9800">解析每个方法</font>,当触发了我们需要hook的方法,我们会在方法的开头或者结尾插入<font color="#f44336">进入检测函数</font>的字节码
4、把hook好的字节码返回给transformer从而载入虚拟机