问题标签 [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.

0 投票
1 回答
459 浏览

macos - Sniff HTTP packets using NKE

I'm trying to read http requests and responses by making a KEXT using NKE. I registered a socket filter, whenever I'm getting data I'm printing mbuf using a code like this:

I can read http requests and some responses data from logs but can't see any HTML content. I was wondering if I'm not correctly reading mbuf or is it some other problem?

0 投票
1 回答
3902 浏览

xcode - 在mac上开发和调试KEXT

我正在使用 Xcode 在 Mac 上开发 KEXT,每次编译后我都通过终端更改权限并加载 KEXT,然后从控制台应用程序读取结果。开发中的一些错误使系统出现内核恐慌,我必须重新启动我的 mac,这太烦人了。我想知道是否有更好的方法来开发和调试 KEXT?

0 投票
0 回答
1362 浏览

macos - kext 有时未加载

我在开发的 kext 中遇到了一些随机的 kext 加载问题。基本上 kext 是为了根据需要更新鼠标 DPI。这里有一些与kext相关的点 1. kext驱动类是从IOHIDEventDriver类派生的,所以在dispatchRelativePointerEvent函数中修改指针移动。基于 DPI 集,我们将在 dispatchRelativePointerEvent 更新 x 和 y 值,我们调用 super::dispatchRelativePointerEvent。2. Info plist 中IOKitPersonalities 下设备的IOHIDInterface 为IOProviderClass、idProduct 和idVendor。3. kextutil 说构建的 kext 一切正常。4. 在“/System/Library/Extensions/”下安装 kext 后,我​​们同样执行 sudo touch。5. 最后重启机器。

在下次启动时,kext 会加载并找到设备并且一切正常。但问题是,如果我卸载 kext 并再次安装 kext,有时 kext 在下次重新启动时无法加载。不确定是什么导致了问题。有谁知道可能出了什么问题?IOKitPersonalities 有什么问题吗?如果探测分数匹配有任何问题,它应该每次都发生。探测分数是否在这里引起任何问题?

0 投票
1 回答
1279 浏览

macos - 从 kext 读取 plist

我想在操作系统重新启动之间保存一个 kext 设置。由于我需要立即加载 kext 后的设置,因此我迫不及待地等待管理守护程序启动。它是从 kext 读取/写入 kext plist 文件的方法还是其他一些方法?

0 投票
1 回答
555 浏览

macos - 如何确定进程是否在网络内核扩展中具有 root 权限?

我正在编写一个套接字过滤器 kext,我想忽略以 root 身份建立的任何连接。在 OS X Lion 之前,以下代码可以完美运行:

但现在使用 Lion 和 Mountain Lion,该is_root()函数始终返回 true。在 Snow Leopard 中,它按我想象的那样工作。

这是我如何在套接字过滤器事件处理程序中测试函数的示例:

但输出总是显示“root”,例如:

建立连接的应用程序是 Twitter(通过 PID 确认)。Twitter 以常规用户权限运行,而不是 root。

是否有更好/正确的方法来确定套接字连接背后的进程是否具有 root 权限?

0 投票
1 回答
3261 浏览

macos - OSX Kext 没有被正确释放

我已经为热插拔 SCSI 设备编写了一个设备驱动程序 kext,在某种程度上基于Wagerlabs 代码(使用驱动程序-用户客户端-应用程序模型)并且一切正常。唯一剩下的问题是驱动程序似乎没有被持续释放,尤其是在应用程序崩溃的情况下。例如,当我尝试卸载 kext 时,即使设备断开连接并且应用程序关闭,驱动程序和用户客户端的未完成实例仍然存在(驱动程序的数量通常超过用户客户端)。

我已经登录了类似的驱动程序功能free(),当我关闭计算机时,我可以看到这些正在执行,因此显然仍然可以终止实例。什么是确保驱动程序实例被终止和释放的“正确”方法,即使主机应用程序崩溃、不正确终止或事情通常不按计划进行?

0 投票
1 回答
12851 浏览

macos - 无法卸载内核扩展;类有实例

我正在为音频设备驱动程序(它是软件,但模拟硬件设备)编写 OSX 内核扩展。

在开发过程中,完全卸载现有的旧版本,然后从头开始构建和安装新版本会很方便。但是,如果不重新启动系统,这有时似乎是不可能的。

程序本身没有运行,源文件已从/System/Library/Extensions/目录中删除。

kextstat揭示了一个例子:

(...意义:)

所以我的驱动程序实例有 0 个 Refs,但kextunload有时会失败,抱怨现有实例:

发生这种情况时,无法“强制”卸载 kext(据我所知)。

由于正在运行的操作系统内核在内存中保存了一个引用,我猜测这个单一实例是否仍然存在?这似乎不对,因为kextunload那样总是会失败。那么为什么kextunload有时只需要重新启动系统才能“完全”卸载所有驱动程序实例呢?

0 投票
2 回答
365 浏览

objective-c - 将 OSReturn 值转换为人类可读的定义

我正在使用其中的一些函数IOKit/kext/KextManager.h以编程方式加载内核扩展,并且遇到了新的错误值。例如:

如何将此值转换为中找到的人类可读定义之一libkern/OSReturn.h

0 投票
1 回答
424 浏览

usb - 隐藏在 10.7 下的 kext 卸载失败,但 10.6 工作完美

我正在为 MacOSX(Windows 已经运行)开发一个虚拟 USB 总线驱动程序,该驱动程序通过网络与一个 linux 盒连接。它在 10.6 和 10.7 下使用大容量存储设备和 HID 设备(如鼠标或键盘)运行良好。

但是对于 10.7(.5) 以下的 HID 设备,移除设备(拔出)或更简单的卸载 kext 失败,因为还有一个实例(分离后保留计数不会降为零)。我的 10.6 和 10.7 测试环境是相同的 MacBooksPro 8.2 i7。

有时(5-50 分钟)后,kext 会在我没有任何动作的情况下自由。它似乎不依赖于不断变化的电源模式。

是的,我有 USBFamily 日志库和大量输出,但是在工作(kextunload ok)和不工作运行之间,我发现日志没有区别,即使日志级别为 7。

由于大容量存储设备似乎运行良好,我猜问题出在 HID 驱动程序堆栈内部,尤其是在 10.7 下?

删除 10.6 和 10.7 之间的 USB HID 设备驱动程序堆栈是否有任何已知差异?

我的 kext 是一个(虚拟)ControllerV3 派生类,为任何真正插入的(在远程 linux 盒子上)USB 设备建立/创建一个 USBDevice。使用 XCode 4.4.1。

提前感谢您的任何想法或提示,关于马库斯

PS:在我看来有点奇怪,在 10.7 下有这么多 HID 对象位于驱动程序堆栈的顶部。在 kextunload 之后(失败“..VirDevice 有 1 个实例”),它们似乎还活着。但这 100% 与本地插入和拔出的罗技鼠标相同。

在我看来,只有最低的两个对象 MsVirBus (虚拟 USB 总线,派生自 IOUSBControllerV3 )和 Mouse@xaffe003f 是一个 IOUSBDevice 派生对象。

kextunload 后的驱动程序堆栈

0 投票
2 回答
1153 浏览

macos - HID 设备被默认 mac 驱动程序绑架

我的应用程序想要访问我插入的 HID 设备,但声称该设备不起作用,因为它已被 IOHIDDevice 驱动程序声明。为了防止我了解到,我应该为 mac(OSX 10.8.2)创建并安装一个无代码的 kext 驱动程序,以防止我的设备被加载。

我已经花了两天时间,到目前为止我没有任何成功。在我的测试用例中,您可以找到

  • 从 USB 探测器记录
  • 我的无代码 kext 模块
  • 连接我的设备时从 ioreg 输出

看来我无法在此处附加文件。

请从http://www.guenther-sohler.net/testcase.tar.gz下载