Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用linux性能工具perf记录cr3寄存器值?_Linux_Perf - Fatal编程技术网

如何使用linux性能工具perf记录cr3寄存器值?

如何使用linux性能工具perf记录cr3寄存器值?,linux,perf,Linux,Perf,perf能够记录多个字段,如addr、ip、timestamp。它还可以记录通用寄存器,如所示。但是我找不到任何关于使用perf记录控制寄存器的相关文档。那么,如何使用perf实现这一点呢?还有其他可用的工具吗?您不能使用perf工具记录控制寄存器值。可以使用--intr regs选项采样的寄存器列表仅限于列出的寄存器。您可以通过查看来确认这一点 perf events模块可访问的寄存器取决于体系结构,如图和所示。将选择性寄存器状态包括到perf记录/脚本输出中,这一点已被引入。这意味着,所有p

perf能够记录多个字段,如addr、ip、timestamp。它还可以记录通用寄存器,如所示。但是我找不到任何关于使用perf记录控制寄存器的相关文档。那么,如何使用perf实现这一点呢?还有其他可用的工具吗?

您不能使用
perf
工具记录控制寄存器值。可以使用
--intr regs
选项采样的寄存器列表仅限于列出的寄存器。您可以通过查看来确认这一点

perf events
模块可访问的寄存器取决于体系结构,如图和所示。将选择性寄存器状态包括到
perf记录/脚本
输出中,这一点已被引入。这意味着,所有
perf
将仅限于使用已指定的寄存器

还有其他问题/答案,告诉您编写程序/内核模块以访问控制寄存器的一些方法。除此之外,您还可以使用QEMU(在TCG模式下)并在VM内运行程序。然后,您可以定期打印寄存器状态(在每个TB的末尾,您将看到所有寄存器值)。还有像GDB这样的指定模拟器,这可能会对您有所帮助

编辑-


有一种方法可以记录
cr3
寄存器值。您可以使用在程序执行期间记录程序的控制流信息。IntelPT在PIP数据包的帮助下跟踪CR3寄存器的更改。您可以使用IntelPT生成的跟踪来跟踪和确定CR3值。

我想从虚拟机外部获取perf-like事件的CR3值。是否有其他硬件功能支持此功能?是的,您可以使用IntelPT记录CR3值。我已对我的原始答案进行了编辑。请看。