Macos IOKit和受信任的BSD策略

Macos IOKit和受信任的BSD策略,macos,linker,kernel,iokit,kernel-extension,Macos,Linker,Kernel,Iokit,Kernel Extension,如何在IOKit内核扩展中使用TrustedBSD中的MAC策略 我已经有了一个正在工作的IOKit扩展,我想为它添加一些策略 为了进行测试,我编写了两个虚拟扩展,一个使用IOKit,一个使用泛型扩展。 通用扩展工作正常,而IOKit扩展正在为符号mac\u policy\u register和mac\u policy\u unregister生成链接错误 $ sudo kextutil -tn /tmp/MACPolicy.kext kxld[com.Test.MACPolicy]: The

如何在IOKit内核扩展中使用TrustedBSD中的MAC策略

我已经有了一个正在工作的IOKit扩展,我想为它添加一些策略

为了进行测试,我编写了两个虚拟扩展,一个使用IOKit,一个使用泛型扩展。
通用扩展工作正常,而IOKit扩展正在为符号
mac\u policy\u register
mac\u policy\u 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
或这些库的任何组合中,但没有成功

我能找到的关于这个的所有信息都是这个讨论列表


我现在瞄准OS X 10.11。

注意丢失的符号是如何被破坏的,就像它们是C++函数一样,但是问题中的函数实际上是简单的C函数。这意味着,当您从C++调用它们时,它们使用的声明是“<代码>外部”“C”/COD>链接说明符。MAC头不考虑C++,因此当从.cpp文件中包含它们时,需要明确地将它们封装在<代码>外部“C”< /C>块中,如:

extern "C" {
#include <security/mac_policy.h>
}
extern“C”{
#包括
}

如果你的<代码>包含< C/C++头文件,你需要使它有条件使用C++代码编译,如通常的<代码> > IFIFF和CPLUS PLUS > />代码>

< P>你应该知道,尽管事实上这个函数<强>是官方添加的< /强>,基于OS X V1.1 11API DIFS


不幸的是,从High Sierra(10.13)开始,MAC policy API对第三方开发者完全关闭。苹果从自己的文档中删除了
mac_policy_register
mac_policy_unregister
mac_policy_conf
mac_policy_ops
和其他主要mac policy部分的所有参考资料。

我现在也发现了这一点,你从哪里获得这些信息?Native“包括”不再从High Sierra开始工作(10.13),“mac_policy.h”标题已从SDK 10.13中删除。有关mac策略的任何信息已在Xcode 9文档和Apple developer portal中删除。