2017-02-28 164 views
0

我构建了一个自制的内核扩展(名为KAuthTest.kext)并且想对其进行测试。因此,在虚拟机上运行的MacOS 10.12.3,我做了以下内容:内核扩展未加载

  • 禁用SIP在恢复模式,并重新启动运行csrutil disable
  • 禁用KEXT签署支票运行sudo nvram kext-dev-mode=1和重启
  • 给它的权限:sudo chown -R root:wheel KAuthTest.kext

然后我用sudo kextload KAuthTest.kext加载它。

然而,

    在系统日志中
  1. ,我并没有从自身做起功能
  2. 查看日志,当我运行kextstat | grep -v com.apple看到所有第三方的kext,我没有看到我的内核扩展。

那么我错过了什么?我如何成功地将它加载到内核中?

注:

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

    的诊断KAuthTest.kext: 代码签名失败:代码签名无效 KAuthTest.kext似乎是加载(用于导通包括联动磁盘库)。

  2. 我也尝试重新启动,但仍没有运气
  3. 如果它的事项,here的为KEXT
+1

'$ sudo nvram boot-args =“kext-dev-mode = 1”'[#Has No Effect](https://developer.apple。com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html)... –

+0

@ l'L'lh ohh谢谢指出!我的问题仍然存在tho:< –

+0

您的'kext'偶然签名? –

回答

1

源代码在这里有没有足够的信息,只是还没有制定出什么问题是的,所以我给你一个快速清单:

  • 禁用SIP足以加载未签名的kexts。使用目标机器上的csrutil status检查是否真的被禁用。
  • 请勿使用kextload加载kext,使用kextutil,不要使用-n。这是什么输出?
  • 您还没有在您的printf调用中添加换行符\n。始终以换行符结尾,否则系统日志会变得混乱,并且可能找不到消息。

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

kextutil应该告诉你哪里出了问题。

+0

与日志记录问题有关:在WWDC 2017期间,苹果公司告诉我说Console.app日志记录是有损的,他们建议我使用'log'命令行工具,如果我没有看到一些消息 – MathPlayer

+0

@MathPlayer是的,对于塞拉利昂和更新的日志情况,[也见这个答案](https://stackoverflow.com/a/46745661/48660)。相信它仍然是缓冲的,如果内核以极快的速度发射日志,可以删除字符。获得无损日志的方法是使用kprintf(火线或串口)机制。 – pmdj