我正在阅读有关OpenRCE的旧博客文章,该文章提到仅二进制分析和覆盖范围内的MSR跟踪。这个词唯一的Google命中是Xen邮件列表中我看不懂的几封电子邮件。什么是MSR跟踪?

评论

我怀疑Rolf会很快提供详细的答案,但与此同时,我发现OpenRCE上的这篇文章很有帮助:openrce.org/blog/view/535/…

#1 楼

MSR跟踪通常是指使用英特尔特定型号寄存器(MSR)从CPU获取跟踪信息。因为现代的(通常是奔腾4之后的)处理器具有调试的硬件支持,所以它比纯软件解决方案要快。有几种方法可以完成此操作:


如Pedram Amini的文章所述,可以通过设置MSR_DEBUGCTLA MSR并启用BTF (single-step on branches)标志来加快单步执行。与纯单步执行相比,这提供了更好的性能,后者会在每条指令上引发调试异常。此外,可以将处理器配置为在缓冲区已满时引发中断,因此您可以将其刷新到磁盘(或任何您喜欢的文件)。在某些模型上,还有一些选项仅用于跟踪用户模式(CPL> 0)或仅跟踪内核模式(CPL = 0)代码。如果您选择这种方法,则必须阅读《英特尔软件开发人员手册》第3B卷的17.4.5-6和17.4.9节。我不能说它已经进入了股票内核。在2011年,长井明宏(Akihiro Nagai)提出了对Branch Trace Store (BTS)工具的修补程序,以添加将使用Intel BTS系统的perf命令。也可以对此进行演示。同样,在2007年,对perf branch trace提出了一个补丁程序,以公开BTS功能。 br />
最后,如果只关心很少的(4-16)个分支,则可以使用ptrace功能。这样做的好处是基本上没有开销,但是缺点是,它只会给您最后的N个分支,其中N取决于处理器(从4个到16个不等)。有关详细信息,请参见英特尔开发人员手册的第17.4.8节。

有趣的一点是,Haswell(英特尔刚刚发布的处理器体系结构)具有该版本,可以跟踪调用和返回,有效地为您提供了一个小的影子调用堆栈,在某些情况下可能非常有用。

LBR还用于至少一个安全系统中,以验证仅从受信任的源调用了一个功能,但这使问题变得有些偏离主题了。


因此,总而言之,MSR跟踪是一种使用Intel处理器的硬件支持来更快地进行跟踪的方法。从理论上讲,它非常吸引人,但是在常用工具中还没有(对此)很多支持。

资料来源: ,第3卷
StackOverflow:使用Intel Last Branch Record的开销是多少?
Pedram Amini:使用Intel MSR寄存器进行分支跟踪
最后分支记录和分支跟踪


评论


好答案。我会将这篇文章添加为阅读的源代码:codeproject.com/Articles/517466/…

–滚轴
13年6月3日,0:23