Mat*_*yer 6 macos boot kernel kernel-extension
我有一个工作的OSX内核扩展,我希望尽早在启动时自动加载.kext使用KAUTH来监视特定路径上的访问,所以在我看来,没有任何东西可以请求将它加载到内核中.在这种情况下,复制它/Library/Extensions(至少从Yosemite这是第三方扩展的推荐路径)将无法解决我的问题.
是否有可能通过修改代码或通过某些辅助配置来实现此目的?
我已经阅读过使用launchd守护进程来使用kextload来加载扩展,如本问题所述,但在我的情况下,我希望尽早加载它.
更新:
我正在使用"通用"内核扩展(链接到BSD库)而不是基于I/O Kit的内核扩展.
我想在launchd开始之前加载我的扩展程序.
您没有在问题中明确说明它,但我从上下文推断您使用的是"通用"内核扩展(与基于I/O工具包的内核扩展相比)?这些只是加载,因为另一个kext依赖于它们,或者因为它们是通过kextutil/kextload或KextManager API显式加载的.
将此与I/O Kit关键字进行对比,当其中一个个性词典与IO注册表中的注册服务匹配时,它们按需加载.这通常用于驱动特定设备,但是各种非硬件相关的系统服务使用该机制来匹配在早期启动期间出现的"IOResources"nub(文档),因此任何将其列为个性提供者的关键字也会被加载在开机.
因此,解决方案是修改您的kext以提供与IOResources nub匹配的IOService.如果您的用户空间组件已经使用另一个接口与kext通信,则服务本身并不需要做任何事情.
如果你不想更改kext的代码本身,你可能会创建一个虚拟kext来执行此操作,但是将主kext声明为依赖项.后一种方法不是特别优雅,但如果由于某种原因修改现有的kext是不可能的,则应该有效.(虽然您可能需要修改info.plist)
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |