2017-02-28 130 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