动态仪器与静态仪器

Dynamic instrumentation vs Static Instrumentation

在 Static Instrumentation 中,参考提到的一句话here

"Inserted instrumentation code is executed as a part of target executable or library providing the means to access internal data"

动态检测怎么样?这是否意味着使用动态检测,检测代码不会 运行 作为可执行过程的一部分?说使用 Dynamic Instrumentation 后的代码 运行s 作为与目标不同的进程是否正确?

不,这样说是不正确的,在这两种情况下,检测 运行 与应用程序 在同一进程中。

不同之处在于将检测添加到应用程序的时间。在附件 link 中提供的工具中,检测被添加到二进制文件 之前 应用程序是 运行,即添加到 "static" 二进制文件.在动态二进制检测框架(如 Pin or DynamoRIO)中,检测是在应用程序执行期间以 JIT 方法添加的:当应用程序是 运行 时,动态二进制检测框架正在将检测(分析代码)添加到即将执行的应用程序片段。

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

public static void premain(String args , Instrumentation inst)

java -java代理:=[选项]

META-INF/MANIFEST.MF 是必需的

动态仪表: 使用动态检测,您 Java classes 的字节码在 JVM 加载它们时进行检测。

public static void agentmain(String args , Instrumentation inst)

agent 附加到 运行 JVM 时执行。

META-INF/MANIFEST.MF 是必需的

允许添加代码 JVM post-factum