内核扩展未加载

时间:2017-02-28 15:12:33

标签: macos kernel darwin kernel-extension

我构建了一个自制的内核扩展(名为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加载它。

然而,

  1. 在系统日志中,我没有看到日志从其启动功能
  2. 当我运行kextstat | grep -v com.apple查看所有第三方关键字时,我没有看到我的内核扩展。
  3. 所以我错过了什么?我如何成功地将其加载到内核中?

    注意:

    1. kextutil -n -print-diagnostics KAuthTest.kext给出了这个:
        

      KAuthTest.kext的诊断:   代码签名失败:代码签名无效   KAuthTest.kext似乎是可加载的(包括磁盘库的链接)。

    2. 我确实尝试重启,但仍然没有运气
    3. 如果重要,here是kext的源代码

1 个答案:

答案 0 :(得分:1)

这里还没有足够的信息来解决问题所在,所以我会给你一个快速清单:

  • 禁用SIP足以加载未签名的kexts。使用目标计算机上的csrutil status检查它是否确实已禁用。
  • 请勿使用kextload加载关键字,使用kextutil,不使用-n。这是什么输出?
  • 您尚未在所有\n来电中添加换行符printf。始终使用换行符终止,否则系统日志会混淆,您可能找不到消息。

由于您没有在kextstat中看到kext,这确实表明在加载阶段存在问题。如果您的代码可能返回KERN_SUCCESS以外的内容,则可能是另一个错误来源。

kextutil应该告诉你出了什么问题。