x86汇编指令执行计数

大家好,我有一个代码,我想找到每个assembly线执行的次数。 我不关心是通过分析还是仿真,但我想要高精度的结果。 我曾经遇到过一个论坛,它提供了一些脚本代码,但我丢失了链接。 任何人都可以帮助我集思广益吗? 问候

编辑 :Okey我想我已经到了一半。 我根据一篇post对英特尔手册3A第16.4.5节提供的BTS(分支跟踪存储)进行了一些研究。 此function提供分支历史记录。 所以现在我需要你的帮助来查找是否有任何开源脚本或工具来执行此操作。 等待检查您的反馈

欢呼=)!

如果您的处理器支持它,您可以启用分支跟踪存储(BTS)。 BTS将所有采用的分支的日志存储在存储器中的预定义区域中。 每个条目都包含分支源和目标。 使用它,您可以计算每个代码段中的次数。

请参阅英特尔软件开发人员手册第16.4.5节(在当前版本中)的第3A卷 ,了解有关如何启用它的详细信息。

如果你不关心性能,你可以做一个小技巧来计算。 引发单步exception,并在进入自定义seh处理程序时,再引发另一个异步并转到下一个命令。

也许像pin或valgrind这样的一些分析工具可以更轻松地为您完成。 我建议你看看。

一种(虽然很慢)方法是编写自己的调试器。 然后它将断开程序的入口点,并且当它被命中时,它将在上下文中设置EFlags上的跟踪标志,因此它也将在下一条指令上中断到调试器。 然后,您可以使用带有EIP的哈希表来计算命中次数。 唯一的问题是开销是极端的,应用程序运行速度非常慢。