2

我正在开发一个在 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 完全禁用 CSR。对于 VM,这可以通过引导到恢复分区、运行 csrutil clear 以完全删除 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 设置还有另一个地方?

谢谢

4

2 回答 2

1

在调试器中将 doprnt_hide_pointers 更改为 false

于 2017-05-22T07:03:59.317 回答
0

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

我发现kprintf()日志记录机制在其他方面也比内核 syslog 更有帮助——它可以正常工作,直到出现恐慌,它没有速率限制,而且噪音更小。缺点是如果你记录很多,它会对性能产生明显的影响。

于 2017-05-20T20:24:49.770 回答