OS X KEXT打印指针结果为<ptr>。

3

使用"%p"来打印指针的标准printf,会输出字面字符串"< ptr >"。例如:

kernel[0]: getvnode zp <ptr> with vp 0 zfsvfs <ptr> vfs <ptr>

这有点繁琐。我曾想过它可能与SIP有关,因为自从El Capitan以来,它才开始使用。但是我的csrutil显示“debug”已被禁用。(KEXT VM已禁用所有SIP)。

我猜苹果公司在这里有些想法,但我希望能够进行调试 :)


嗯,我猜这是为了避免将内核指针值泄露到用户空间,这可能会使ASLR变得毫无意义。 - pmdj
1个回答

3
我被告知要在nvram的boot-args中添加“-show_pointers”,我可以确认这会使一切都按预期工作。

1
自从10.11.2版本以后,这个功能已经无法使用了,因为苹果公司决定将其删除。您应该运行“开发”内核(或调试内核),并使用sysctl“hide_kernel_pointers”。或者,您可以在此处详细了解一些nvram黑客技巧:https://github.com/openzfsonosx/zfs/issues/461#issuecomment-177052785 - lundman
你能提供一些使用开发内核和使用sysctl的资源吗? - omghai2u

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接