【发布时间】:2014-06-10 23:12:24
【问题描述】:
我是用于动态二进制检测的 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汇编指令行。我也无法弄清楚这种差异的原因。
我正在运行带有 Linux 内核版本 3.8.0-39 的 64 位 Ubuntu 12.04。提前致谢。
【问题讨论】:
标签: c assembly valgrind x86-64 perf