0

我正在使用 Pintool 运行的程序上运行 Python gdb 脚本。具体来说,我使用了-appdebug_enable开关并在 Pintool 中创建了一个语义断点,该断点自动触发断点并运行我提供的 Python 脚本。该脚本主要检查局部和全局变量并扫描程序动态分配的内存。我注意到 gdb 脚本的运行速度比我在没有 Pintool 的情况下运行程序和 gdb 慢几个数量级。我还尝试使用虚拟 Pintool 来查看我的 Pintool 实现是否导致速度变慢,但似乎并非如此。

我的结论是 Pin 减慢了我的 gdb 脚本,但谁能解释一下如何以及为什么?有什么工具可以用来分析 Pin 的性能下降吗?

(我知道gdb性能通常不是人们太在意的东西,但我很好奇减速的根源。)

4

1 回答 1

0

在您的情况下,PIN 用作 JIT(即时)编译器。因此,只要指令序列发生变化,它就会有效地停止您的程序,并重新编译(延迟的主要原因)并添加自己的一些指令(额外的延迟)。PIN 将您的程序可执行文件作为参数。从第一条指令到下一条分支指令(call、jmp、ret),它使用其附加指令集重新生成指令序列,这些指令将在执行生成的指令序列后将控制权转移回 PIN 框架。虽然重新生成代码 PIN 允许用户使用检测代码注入额外的分析代码

于 2020-08-07T05:43:05.070 回答