问题标签 [kernel-extension]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - 使用 gdb 调试 kext:死锁
我有 I/O Kit 驱动程序:虚拟以太网设备。经过一段时间的工作操作系统挂起,所以看起来我的驱动程序有一些死锁。
我已经完成了接下来的步骤:
- 通过 FireWire 连接两台 macbook
- 设置调试环境
- 初始化 NMI(通过电源按钮)
- 通过 gdb 连接到目标
- 获取我的 kext 的地址
- 创建和加载符号(这是最后一点在我读过的所有文档中)
到目前为止一切都很好。如果发生内核恐慌,这就足够了。但在我的情况下,没有内核恐慌,我驻留在处理 NMI 的线程中。
现在的问题是:如何切换到我的 kext 线程?
命令showalltasks
给了我所有任务的列表,我的 kext 可能正在运行的唯一任务是 kernel_task,所以我试图通过检查这个任务showtaskthreads
,showtaskstacks
但找不到任何与我的代码类似的东西。我错过了什么吗?
如有任何建议或文档链接,我将不胜感激。
xcode - 无法在 OS X 中加载内核扩展(.kext 文件)(不包含架构代码:x86_64 错误)
我正在尝试将内核扩展文件 (.kext) 加载到 OS X Mountain Lion (10.8.3)。我用 XCode 4.6.1 重建了它。但是,当我尝试使用“kextutil -n -t /xxxx.kext”加载它时,我收到了以下警告。
可执行文件不包含架构代码:x86_64
似乎代码不支持 x86_64,但我确实在构建设置中包含了 x86_64,只要看起来适用,例如 Valid Architectures: i386, x86_64。
我应该如何更改设置以使其可以使用 64 位内核加载?
macos - 获取调用系统调用的进程pid的方法?
我做了一个 kext 来使用我的系统调用,而不是参考Re-routing System Calls的现有系统 调用。
在测试期间,我想知道哪个进程调用了这个系统调用。
我需要允许应用程序正常继续,除了指定的进程。
有什么东西可以获取调用进程的信息吗?
macos - 使用自定义 kext 在 MAC OS X 上隐藏 USB 音频设备
我正在开发一个应用程序,它进行自定义音频处理并将处理后的音频发送到 USB 耳机。我的要求是 USB 耳机不应该在系统偏好设置的音频输出设备列表中对用户可见。使用来自 Apple 的“SampleUSBAudioOverrideDriver”无代码 kext 示例代码,我可以更改接口名称,但我真的需要隐藏它。子类化 AppleUSBAudioDevice 是一种选择吗?
macos - Mac OS X 上的 NDIS 中间微型端口
我们有一个中间网络层的解决方案,目前在 Windows 上作为 NDIS IM 实现。我正在研究如何将这个东西移植到 Mac OS X 上。
理想情况下,它应该是一个中间驱动程序/kext,位于支持以太网的适配器之上,并且位于任何 IP/ARP/其他任何东西之下,仅与以太网帧一起运行。
一些教程/示例将是首选,例如来自 WDK 的 passthru 示例,尽管任何提示都会受到赞赏。
不,这不是过滤器/防火墙,也不是 vpn,它是在该级别运行的全新且相当复杂的中间层。
macos - 静态变量导致 OSX 网络 kext 崩溃
在 mac OS X 网络内核扩展中,我注意到如果我有一个静态分配的缓冲区而不是动态的缓冲区,这会在调用诸如 printf() 或 send()、ctl_enqueuedata() 等 API 函数时导致内核恐慌,如以及其他许多人。就好像无法从我的代码外部读取或写入静态分配的缓冲区。
例如:
这是为什么?
编辑:我正要发布代码,但它很长,并且有效的版本和导致恐慌的版本之间的唯一区别如上所述。我想到的是静态变量和使用 OSMalloc 分配的变量之间的内存位置差异。ctl_enqueuedata() 中的代码可以同时访问两者吗?
这是发生的事情:
macos - 如何在 Mac OS X 上使用 Core Audio API 以编程方式设置扬声器配置?
我有一个 7.1 声道音频输出设备和一个自定义 kext 来驱动它。我的自定义应用程序需要向设备发送 7.1 后声道音频数据,但设备仅接收 2 声道音频数据。我检查了“音频 MIDI 设置”应用程序中的“配置扬声器”选项,它设置为立体声。当我将其设置为“7.1 后环绕”时,一切正常。在我的最终产品中,我不希望用户必须手动完成所有这些操作。所以,问题是 - 是否有任何核心音频 API 或任何其他以编程方式执行此操作的方法?
macos - MacOS 内核、.kext 和 /dev 中的设备
我的 USB 3G 调制解调器出现问题,我进行了调试,但我无法确定在 /dev 中创建设备的 .kext 文件
如何确定 /dev 中的设备文件(如 /dev/usbdriver.001)和 .kext 之间的关系?
macos - 符号存在于 mach_kernel 但不在任何 kpi 中
我正在尝试开发一个 MAC(强制访问控制)策略模块,我正在尝试实现 MAC API“mac_iokit_check_device”。我能够构建一个实现 mac_iokit_check_device API 的 MAC 策略模块 kext,并且我能够加载 kext。但是,使用此策略模块 API 的驱动程序 kext 存在问题。它正在正确编译。但无法解析符号“_mac_iokit_check_device”。我使用的驱动程序kext的依赖库如下。
奇怪的是,似乎没有一个 kpi 库定义了符号 _mac_iokit_check_device。我通过运行命令推断出这一点
然而,内核映像似乎有符号,正如推断的那样
有什么办法可以解决驱动程序 kext 中这个未解决的符号问题?在这个问题上的任何帮助/指针将不胜感激。
macos - 卸载仍然有实例的 kext
我正在更新我的一台设备的驱动程序,并希望 kextunload 旧驱动程序并 kextload 新驱动程序,因此不再需要重新启动。
安装后我尝试:
发生的错误如下所示:
(内核)无法卸载 kext com.driver.Driver;类有实例:(内核)Kext com.driver.Driver 类 com_driver_Driver_USBAudioDevice 有 1 个实例。无法卸载 com.driver.Driver - (libkern/kext) kext 正在使用或保留(无法卸载)。
ioreg 中不存在该设备。如何找出阻止我卸载驱动程序的实例是什么?