【发布时间】:2016-05-13 12:28:17
【问题描述】:
如何在 IOKit 内核扩展中使用 TrustedBSD 的 MAC 策略?
我已经有一个可用的 IOKit 扩展,我想向它添加一些策略。
为了测试,我编写了两个虚拟扩展,一个使用 IOKit,一个使用通用扩展。
通用扩展运行完美,而 IOKit 则为符号 mac_policy_register 和 mac_policy_unregister 生成链接错误。
$ sudo kextutil -tn /tmp/MACPolicy.kext
kxld[com.Test.MACPolicy]: The following symbols are unresolved for this kext:
kxld[com.Test.MACPolicy]: mac_policy_register(mac_policy_conf*, unsigned int*, void*)
kxld[com.Test.MACPolicy]: mac_policy_unregister(unsigned int)
Link failed (error code 5).
Check library declarations for your kext with kextlibs(8).
$ sudo kextlibs -v 6 -undef-symbols /tmp/MACPolicy.kext
Kext user-space log filter changed from 0xff2 to 0xfff.
Kext kernel-space log filter changed from 0xff2 to 0xfff.
Kext library architecture set to x86_64.
Kext library architecture is x86_64 (unchanged).
For all architectures:
com.apple.kpi.iokit = 15.4
com.apple.kpi.libkern = 15.4
For x86_64:
2 symbols not found in any library kext:
__Z21mac_policy_unregisterj
__Z19mac_policy_registerP15mac_policy_confPjPv
我已经将指定的库添加到我的Info.plist,以及com.apple.kpi.dsep、com.apple.kpi.unsupported、com.apple.kpi.mach 或这些的任意组合,但没有成功。
我能找到的所有信息都是这个thread on the darwin-kernel讨论列表。
我现在的目标是 OS X 10.11。
【问题讨论】:
标签: macos linker kernel iokit kernel-extension