我有很多关于英特尔PT的问题(一直试图解码手册,但非常困难)。我的问题是:
答案 0 :(得分:5)
我目前也正在研究如何使用英特尔PT。据我所知:
IA32_RTIT_CTL,地址570H,是主要的启用和控制MSR 用于跟踪数据包生成。位位置在表36-5中列出。
您可以清除或设置IA32_RTIT_CTL MSR以禁用或启用PT跟踪。这可以从系统内部提供PT提供的痕迹。事实上,我不认为它可以通过任何其他方式完成。
是。当发生对CR3寄存器的修改时,创建寻呼信息包(PIP)。但是不确定IDTR和其他人。此外,CR3寄存器可用于跟踪滤波。
英特尔PT背后的整个理念是数据包编码和解码。当x事件发生时,生成y数据包。你的工作是"解码"这个CPU提供了数据并从中获得了一些高级感。此外,您可以"编码"数据包并将它们送入系统进行解码。同样,解码器(以及可选的编码器)功能是您的工作。您可以查看英特尔的开源解码器/编码器库参考实现here。我建议在Linux下尝试使用最新的稳定内核(截至本文撰写时为4.1.3)。 值得注意的是,PT将其数据存储在您告诉它的位置,通常是保留的内存区域或调试端口。
答案 1 :(得分:2)
这是允许在4.3中使用英特尔PT的补丁:
https://lkml.org/lkml/2013/12/11/233
https://lkml.org/lkml/2015/9/24/181
https://lkml.org/lkml/2015/9/27/45
这是关于PT与LBT等其他英特尔功能的互动:
https://lkml.org/lkml/2014/7/31/572
阅读tools / perf / Documentation / intel-pt.txt上关于使用方法的文档。
来自英特尔的Andi Kleen是Skylakes / Broadwell补丁的创始人(只有这两个处理器和Atom系列支持Intel PT),并且他有用户空间工具来演示它用于调试:
https://github.com/andikleen/simple-pt
有关详细信息,请参阅:
https://tthtlc.wordpress.com/2016/01/26/intel-processor-trace-how-to-use-it/
答案 2 :(得分:1)
撰写本文时,距今已有五年之久,但确实出现在搜索中,这是2020年的更新:
答案:
1)取决于您的操作系统。只要x86-64操作系统看到的英特尔CPU至少为Broadwell或更高版本,它就应该能够支持它,因为添加了更细粒度的定时和地址过滤功能,用户真正希望使用Skylake或更高版本的处理器。
如今,对于Linux来说,答案是肯定的,因为向操作系统添加了本机支持。
对于Microsoft Windows,通过ipt.sys驱动程序向Windows 10添加了非正式的半文档支持。
参见:https://github.com/ionescu007/winipt
另外,在Github上有一些Windows IPT驱动程序项目(大部分已被放弃),包括“ CheatEngine”的可用项目。
2)下载“英特尔64和IA-32架构 从软件开发人员手册”开始,在第35-1页的“第35章英特尔处理器跟踪”部分。另有声明时,您通过一系列以IA32_RTIT_CTL开头的9个MSR寄存器来设置和控制IPT功能。 )功能,至少使支持该功能的所有CPU的MSR保持不变(尽管某些世代比其他世代支持更多的功能)。
缺少总体文档,但是英特尔手册确实提供了如何控制和读取IPT跟踪数据的信息,您可以对其进行后续操作,以使用iptlib英特尔参考解码器进行解码。
3)参见我的答案#2。再次,该手册主要告诉您如何执行这些操作,此外,您还可以查看一些Github驱动程序项目,并查看它们的操作方式。您可以将功能设置为使用循环缓冲区,或者在其内部物理内存缓冲区(由您设置)变满时触发中断。