我正在尝试开发一个 MAC(强制访问控制)策略模块,我正在尝试实现 MAC API“mac_iokit_check_device”。我能够构建一个实现 mac_iokit_check_device API 的 MAC 策略模块 kext,并且我能够加载 kext。但是,使用此策略模块 API 的驱动程序 kext 存在问题。它正在正确编译。但无法解析符号“_mac_iokit_check_device”。我使用的驱动程序kext的依赖库如下。
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IOUSBFamily</key>
<string>5.5.5</string>
<key>com.apple.kpi.mach</key>
<string>12.3</string>
<key>com.apple.kpi.unsupported</key>
<string>12.3</string>
<key>com.apple.kpi.iokit</key>
<string>12.3</string>
<key>com.apple.kpi.libkern</key>
<string>12.3</string>
<key>com.apple.kpi.bsd</key>
<string>12.3</string>
<key>com.apple.kpi.dsep</key>
<string>12.3</string>
</dict>
奇怪的是,似乎没有一个 kpi 库定义了符号 _mac_iokit_check_device。我通过运行命令推断出这一点
find /System/Library/Extensions/System.kext/PlugIns -type f |
grep -v plist | xargs nm | sort | uniq | grep _mac_iokit_check_device
然而,内核映像似乎有符号,正如推断的那样
nm /mach_kernel|grep mac_iokit_check
有什么办法可以解决驱动程序 kext 中这个未解决的符号问题?在这个问题上的任何帮助/指针将不胜感激。