一、JavaAgent技术
1.1 什么是JavaAgent
JavaAgent是一种特殊的Java程序,是Instrumentation的客户端。它与普通Java程序通过main方法启动不同,JavaAgent并不是一个可以单独启动的程序,它必须依附在一个Java应用程序(JVM)上,与主程序运行在同一个进程中,通过Instrumentation API与虚拟机交互。
1.2 两种加载机制
对于JVM启动时加载的Agent模块代码,Instrumentation会通过premain方法传入代理程序,premain方法会在调用程序main方法之前被调用,同时Instrumentation包含agentmain方法实现字节码改写,二者的区别如下:
● 启动前加载:premain 方 法 用 于 在 启 动 时 , 在 类 加 载 前 定 义 类 的TransFormer(转化器),在类加载的时候更新对应的类的字节码。
● 运行时加载:agentmain方法用于在运行时进行类的字节码的修改,步骤分为注册类的TransFormer调用和retransformClasses函数进行类的重加载。
原文链接:https://blog.csdn.net/mfmfmfo/article/details/126689494
1.2 JavaAgent使用场景
Java agent
技术结合 Java Intrumentation API
可以实现类修改、热加载等功能,下面是 Java agent
技术的常见应用场景:
二、Jadx实现JavaAgent
https://blog.csdn.net/mfmfmfo/article/details/126689494
参考文献:
https://juejin.cn/post/7157684112122183693