Pintool-如何遍历所有迹线(甚至是已经执行过一次的迹线)?

时间:2018-02-08 17:18:56

标签: intel-pin

我试图计算在整个程序运行中执行bbl的次数,但显然,Trace_addinstrument函数会跳过已经执行过一次的跟踪。有人有什么想法吗?

2 个答案:

答案 0 :(得分:0)

针式仪器分两个阶段工作。遇到新代码时会调用检测阶段,并允许您插入分析回调。每次遇到代码时都会调用分析回调。

我强烈建议您阅读针脚手册的第一位,以了解仪器和分析功能之间的区别。

答案 1 :(得分:0)

调用的工具允许您插入回调。简单来说,该函数将让您在每个乐器之前调用函数。您可以将此仪器定义为指令,跟踪或例程。现在,具体到你的问题,找到bbl的数量很容易。然而,Pin遵循不同的BBL定义。查找执行BBL(每个Pin的定义)的次数很容易。您可以简单地插入Trace Instrumentation调用,并且对于每个BBL增加分析调用中的计数器,您将获得BBL计数。

如果您想要通过BBL的教科书定义(一个条目一个退出),这意味着在BranchOrCall语句中有一个BBL中断,请使用IsBranchOrCall API插入一个调用,并在回调函数中递增BBLcounter。

我建议尝试这两种方法并找出两种定义之间的区别。