我刚接触 pin 工具,这是一种用于动态二进制插装的工具。我正在尝试使用pin工具API编写一些简单的客户端程序。其中一个简单的客户端程序是计算给定二进制文件执行的指令数,这是pin示例之一。
我用C语言编写了一个非常基本的程序,
int main(){return 0;}
使用gcc编译的程序,当我使用pin工具来计算上述C程序的指令数时,它给出了答案96072。
当我使用valgrind执行相同任务时,它给出了近似于前一个的97487的答案。但是,当我使用perf时,答案则是421,256。
各种工具之间差异的原因是什么呢?
为了找到更多细节,我将C程序编译为x86汇编,并包含约20-30行汇编指令。但是,当我使用objdump来反汇编二进制文件时,结果是200-300行汇编指令。我也无法弄清楚这种差异的原因。
我正在运行64位Ubuntu 12.04,Linux内核版本为3.8.0-39。提前感谢。