Java Agent探针

运行前增强

  1. 通过MANIFEST.MF配置文件指定premain方法对应的类位置,属性名叫Premain-Class
  2. premain方法里通过Instrumentation接口添加一个ClassFileTransformer的自定义实现类
    instrumentation.addTransfomer(xxTransfomer);
  3. ClassFileTransformer实现类里可以通过第三方字节码增强工具包来修改业务类的字节码
  4. 启动目标Java程序时,增加启动命令 -javaagent:"xxx"

运行时增强

  1. 通过MANIFEST.MF配置文件指定agentmain方法对应的类位置,属性名叫Agent-Class
  2. agentmain方法里通过Instrumentation接口添加一个ClassFileTransformer的自定义实现类
    instrumentation.addTransfomer(yyTransfomer, true);
  3. 设置可以被重复修改的类信息
    instrumentation.retransformClasses(Class.formName("aaaa");
  4. ClassFileTransformer实现类里可以通过第三方字节码增强工具包来修改业务类的字节码
  5. 启动目标Java程序,进程PID为3547
  6. 启动另一个任意Java程序,该程序代码里通过VirtualMachine类的attach方法获取进程3547的jvm
  7. 执行VirtualMachine的loadAgent方法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容