c++ - DEXT 在 macOS 10.15.7 上崩溃

标签 c++ macos driverkit macos-system-extension

我成功构建并运行了 Apple 的示例 Communicateing Between a DriverKit Extension and a Client App在 macOS 11 上,这意味着我可以安装 DEXT 并通过它的客户端控制它。 虽然在 macOS 10.15.7 上,我可以构建它并安装 DEXT,但 DEXT 崩溃了。

systemextensionsclt 的输出:

systemextensionsctl list
1 extension(s)
--- com.apple.system_extension.driver_extension enabled active  teamID  bundleID (version)  name    [state]
*   *   -   com.example.apple-samplecode.dext-to-user-client.driver (1.0/1) com.example.apple-samplecode.dext-to-user-client.driver [activated enabled]

但是当操作系统试图运行它时,DEXT 本身显然会崩溃:

Dyld Error Message:
  Symbol not found: __ZN8OSAction18CreateWithTypeNameEP8OSObjectyymP8OSStringPPS_
  Referenced from: /Library/SystemExtensions/*/com.example.apple-samplecode.dext-to-user-client.driver (which was built for Mac OS X 19.0)
  Expected in: /System/DriverKit/System/Library/Frameworks/DriverKit.framework/DriverKit

Thread 2 Crashed:: Dispatch queue: NullDriverUserClient-Default
0   dyld                            0x000000011bb05ede __abort_with_payload + 10
1   dyld                            0x000000011bb2f55d abort_with_payload_wrapper_internal + 80
2   dyld                            0x000000011bb2f58f abort_with_payload + 9
3   dyld                            0x000000011bb2cbf4 dyld::halt(char const*) + 463
4   dyld                            0x000000011bab4bc3 dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 140
5   libdyld.dylib                   0x000000010dcf5936 dyld_stub_binder + 282
6   ???                             0x000000010da6f1a0 0 + 4524011936
7   com.example.apple-samplecode.dext-to-user-client.driver 0x000000010da64c41 NullDriverUserClient::Start_Impl(IOService*) + 705 (NullDriverUserClient.cpp:223)
8   com.apple.DriverKit             0x000000010dae09e4 IOService::Start_Invoke(IORPC, OSMetaClassBase*, int (*)(OSMetaClassBase*, IOService*)) + 86
9   com.example.apple-samplecode.dext-to-user-client.driver 0x000000010da67f75 NullDriverUserClient::_Dispatch(NullDriverUserClient*, IORPC) + 293 (NullDriverUserClient.iig.cpp:180)
10  com.example.apple-samplecode.dext-to-user-client.driver 0x000000010da67e3d NullDriverUserClient::Dispatch(IORPC) + 77 (NullDriverUserClient.iig.cpp:167)
11  com.apple.DriverKit             0x000000010dacd241 invocation function for block in OSMetaClassBase::Invoke(IORPC) + 117

注意:同一构建的二进制文件在 macOS 11 上运行良好。

我在 macOS 11.4 (20F71) 和 10.15.7 (19H1217) 上使用 Xcode 12.4 (12D4e)。 理想情况下,DEXT 也应该在 macOS 10.15 上运行。

这是 macOS 10.15.7 上 DriverKit.framework 中的错误还是我以错误的方式设置了项目?

最佳答案

缺少的符号 __ZN8OSAction18CreateWithTypeNameEP8OSObjectyymP8OSStringPPS_ 指的是 OSAction::CreateWithTypeName(OSObject*, unsigned long long, unsigned long long, unsigned long, OSString*, OSAction**)This function is only available from Big Sur/macOS 11.0/DriverKit 20.0 onwards.

您应该为回调类型的 OSAction 使用自动生成的 Create 函数,否则使用旧的 OSAction::Create功能。

关于c++ - DEXT 在 macOS 10.15.7 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67970880/

相关文章:

c++ - SDK代码生成器

c++ - Qt5 paintEvent() 区域太小

macos - 如何使用 swift 从 core-graphics API 获取窗口列表

macos - 在 zsh 中安装 npm 后找不到命令

macos - 如何在 DriverKit 中将我的 dex 与 USB 设备匹配?

xcode - 在没有应用程序的情况下为遗留无代码 kext 创建 Dext?

c++ - 拔下设备后,DriverKit USB 驱动程序 (dext) 进程不会终止

c++ - 如何使用从dll中显式实例化模板派生的dllexport-ed类,而不会发出警告?

c++ - 在 C++ 中生成组合列表的最简单方法是什么?

swift - NSPopover 解雇不会将其从 parent presentedViewController 中删除(代码 11)