c语言 - 在<ptr>运行 OS X 10.12 的并行虚拟机上显示内核打印输出(而不是 )中的指针值



我正在研究在 10.12.4 VM 下运行的 Kext(我使用并行),我想启用指针打印输出(目前所有指针都隐藏并在/var/log/system.log显示为<ptr>)

在 10.12 之前,可以选择通过设置nvram csr-active-config=%ff%00%00%00直接收起调试限制。但是,现在无法直接设置csr-active-config,而是通过恢复模式的csrutil disable。不幸的是,它不会禁用所有 SIP 功能,指针保持隐藏状态。

幸运的是,以下提供解决方法的线程:

或者,可以通过设置 csr-active-config=ff%00%00%00%00 来完全禁用 CSR。对于虚拟机,这可以通过引导到恢复分区,运行csrutil清除以完全删除csr-active-config变量和nvram Xsr-active-config=ff%00%00%00来实现。然后关闭 VM,并使用十六进制编辑器更改 nvram 文件中的 X -> c。这将允许 -show_pointers 引导参数工作。

我正在使用Parallels,我试图找到nvram设置的位置。我看到了名为NVRAM.dat的有前途的文件,但不幸的是 按照上面引用的段落中的说明进行操作后,我无法Xsr-active-config跟踪字符串。

也许还有另一个地方可以设置nvram设置?

谢谢

在调试器中将doprnt_hide_pointers更改为 false

我没有直接回答您的问题,但我有一个解决方法:kprintf()串行日志的输出经过指针清理。因此,如果您在调试引导参数中启用 kprintf 标志,激活一个虚拟串行端口,该端口写入 VM 设置中的主机文件并将日志记录从printf/IOLog更改为kprintf,您可以获取串行端口文件的原始日志记录。

我发现kprintf()日志记录机制在其他方面也比内核 syslog 更有帮助 - 它可以在恐慌时工作,它不受速率限制,而且噪音更小。缺点是,如果您大量登录,它会对性能产生明显影响。

最新更新