Dynamic 动态仪表与静态仪表

Dynamic 动态仪表与静态仪表,dynamic,static,instrumentation,Dynamic,Static,Instrumentation,在静态仪表中,参考所述句子: “插入的检测代码作为目标可执行文件或提供访问内部数据方法的库的一部分执行” 那么动态仪器呢?这是否意味着使用动态插装时,插装的代码不会作为可执行进程的一部分运行?使用动态指令插入时,指令插入的代码作为独立于目标的进程运行是否正确?否,不正确的说法是,在这两种情况下,指令插入都在与应用程序相同的进程中运行 区别在于将检测添加到应用程序的时间。在所附链接中提供的工具中,在应用程序运行之前将检测添加到二进制文件中,即添加到“静态”二进制文件中。在动态二进制插装框架(如或)

在静态仪表中,参考所述句子:

“插入的检测代码作为目标可执行文件或提供访问内部数据方法的库的一部分执行”


那么动态仪器呢?这是否意味着使用动态插装时,插装的代码不会作为可执行进程的一部分运行?使用动态指令插入时,指令插入的代码作为独立于目标的进程运行是否正确?

否,不正确的说法是,在这两种情况下,指令插入都在与应用程序相同的进程中运行


区别在于将检测添加到应用程序的时间。在所附链接中提供的工具中,在应用程序运行之前将检测添加到二进制文件中,即添加到“静态”二进制文件中。在动态二进制插装框架(如或)中,插装是在JIT方法的应用程序执行期间添加的:在应用程序运行时,动态二进制插装框架添加插装(分析代码)要执行的应用程序片段。

静态检测: 使用静态插装,插装代码插入到应用程序的类文件中,然后更新的类文件保存在磁盘上

public static void premain(String args , Instrumentation inst)
java-javaagent:=[选项]

META-INF/MANIFEST.MF是必需的

动态检测: 使用动态插装,Java类的字节码在JVM加载时被插装

public static void agentmain(String args , Instrumentation inst)
当代理连接到正在运行的JVM时执行

META-INF/MANIFEST.MF是必需的

允许添加代码JVM post factum