我构建了一个自制的内核扩展(名为KAuthTest.kext
)并想测试它。因此,在运行macOS 10.12.3的VM中,我执行了以下操作:
csrutil disable
来禁用SIP,然后重新启动。sudo nvram kext-dev-mode=1
并重新启动sudo chown -R root:wheel KAuthTest.kext
然后我使用sudo kextload KAuthTest.kext
加载它。
然而,
kextstat | grep -v com.apple
查看所有第三方关键字时,我没有看到我的内核扩展。所以我错过了什么?我如何成功地将其加载到内核中?
注意:
kextutil -n -print-diagnostics KAuthTest.kext
给出了这个:
KAuthTest.kext的诊断: 代码签名失败:代码签名无效 KAuthTest.kext似乎是可加载的(包括磁盘库的链接)。
答案 0 :(得分:1)
这里还没有足够的信息来解决问题所在,所以我会给你一个快速清单:
csrutil status
检查它是否确实已禁用。kextload
加载关键字,使用kextutil
,不使用-n
。这是什么输出?\n
来电中添加换行符printf
。始终使用换行符终止,否则系统日志会混淆,您可能找不到消息。由于您没有在kextstat中看到kext,这确实表明在加载阶段存在问题。如果您的代码可能返回KERN_SUCCESS
以外的内容,则可能是另一个错误来源。
kextutil
应该告诉你出了什么问题。