【发布时间】:2017-07-19 15:18:51
【问题描述】:
我构建了一个自制的内核扩展(名为KAuthTest.kext)并想对其进行测试。所以在运行 macOS 10.12.3 的 VM 中,我做了以下操作:
- 在恢复模式下运行
csrutil disable禁用 SIP,然后重新启动。 - 通过运行
sudo nvram kext-dev-mode=1禁用 kext 签名检查并重新启动 - 给它权限:
sudo chown -R root:wheel KAuthTest.kext
然后我使用sudo kextload KAuthTest.kext 加载它。
然而,
- 在系统日志中,我没有从它的启动函数中看到日志
- 当我运行
kextstat | grep -v com.apple查看所有第三方 kext 时,我没有看到我的内核扩展。
那么我错过了什么吗?我如何才能成功地将它加载到内核中?
注意:
-
kextutil -n -print-diagnostics KAuthTest.kext给出了这个:KAuthTest.kext 的诊断: 代码签名失败:代码签名无效 KAuthTest.kext 似乎是可加载的(包括磁盘库的链接)。
- 我确实尝试过重新启动,但仍然没有成功
- 如果重要,here 是 kext 的源代码
【问题讨论】:
-
$ sudo nvram boot-args="kext-dev-mode=1"# Has No Effect ... -
@l'L'l ohh 感谢您的指出!我的问题仍然存在:
-
您的
kext代码签名是偶然的吗? -
@l'L'l,不,但我认为这并不重要,因为我禁用了 SIP,对吧?正如 Apple 所说的 here:“您可以为内部测试构建未签名的 kext,并在您的测试系统上禁用系统完整性保护以允许加载未签名的 kext。”
-
好吧,根据正确的文档,虽然我从 Apple 开发人员那里听到了相互矛盾的信息......“所有的 kext 都必须签名并且必须住在
/Library/Extensions,因为 El Capitan。只有未签名的 kext可能永远在/System/Library/Extensions,但不再允许加载未签名的kext。”,来自这里:lists.apple.com/archives/darwin-kernel/2016/Jun/msg00010.html。所以我猜它确实需要进行代码签名。
标签: macos kernel darwin kernel-extension