我是pin工具的新手,用于动态二进制检测.我试图使用pin工具API编写一些简单的客户端程序.一个这样的简单客户端是计算二进制的执行指令的数量,该指令作为引脚的示例之一给出.
我用C写了一个非常基本的程序,
int main(){return 0;}
Run Code Online (Sandbox Code Playgroud)
并使用gcc编译器编译.当我使用pin工具来计算用于上述C程序的二进制的指令时,它给了我答案96072
当我使用valgrind做同样的任务时,它给了我97487的答案,它几乎等于前一个.但是,当我使用perf时,答案是421,256
.各种工具之间出现这种差异的原因是什么?
为了找到更多细节,我已经将C程序编译成x86程序集,它包含大约20-30行汇编指令.但是当我使用objdump来反汇编二进制文件时,它产生了200-300行汇编指令.我也无法弄清楚这种差异的原因.我使用Linux内核版本3.8.0-39运行64位Ubuntu 12.04.提前致谢.