首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过二进制程序监控机器代码调用

如何通过二进制程序监控机器代码调用
EN

Stack Overflow用户
提问于 2011-02-09 01:45:09
回答 3查看 327关注 0票数 1

我的目标是记录一个给定的二进制程序在其运行期间执行的处理器指令的数量。虽然很容易(通过gdb或任何其他反汇编程序)从源代码中获得实际的机器码,但这并没有考虑到程序中的函数调用和分支,这些调用和分支会导致指令被多次执行或完全跳过。

有没有一个简单的解决方案?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-09 07:36:04

这是非常特定于硬件的,但大多数处理器都提供了一种工具,可以计算流经它们的机器指令(和其他事件)的确切数量。这就是分析器如何通过查询这些内部寄存器来捕获缓存未命中之类的东西。

The PAPI library提供了在各种主要处理器上查询此数据的调用。如果你使用的是Linux+x86,PerfSuite为你提供了一些更高级的工具,这些工具可能更容易上手。

Intel has a monitor app您可以用来实时观察芯片的内部计数器,它们的Performance Analysis Guide描述了芯片上的各种性能监控单元以及如何读取它们。

票数 1
EN

Stack Overflow用户

发布于 2011-02-09 04:12:11

如果你在Linux上,你应该能够通过cachegrind运行你的程序来获得指令计数。

也可以使用ollydbg的运行跟踪功能来获取指令计数,但这可能会受到内存的限制。

或者,也可以编写一个小型调试器,在单个步骤中简单地运行程序。

票数 1
EN

Stack Overflow用户

发布于 2011-02-09 04:18:25

用于跟踪系统调用的原始工具是特定于平台的。

  • Solaris:trussdtrace
  • MacOS X:dtrace
  • Linux:strace
  • HP-UX:tusc
  • AIX:truss
  • Windows:...

例如(Solaris):

代码语言:javascript
复制
truss -o ls.truss ls $HOME

这将捕获ls执行的所有系统调用,因为它列出了您的主目录。

OTOH,这可能不是你的after...in,在这种情况下它的价值是有限的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4936414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档