问题标签 [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 投票
2 回答
1046 浏览

gdb - 通过以太网在 Mac 之间进行两机 GDB 调试 - 事务超时

我正在尝试使用运行 gdb 的远程计算机调试一个设备驱动程序,该驱动程序正在使 Mac 上的内核崩溃(尝试按照此处的说明进行操作)。两台机器通过以太网连接到同一个网络(甚至同一个路由器,都可以访问网络)。我也设置nvram boot-args="debug=0x144"了目标并重新启动。

然后我像往常一样在目标上加载内核扩展。在主机上,我像这样启动 gdb:

进入 gdb 后,我加载内核宏并设置远程连接

但是,最后一个命令没有建立连接,我得到了一个无穷无尽的线轴

将 gdb 连接到目标机器的正确方法是什么?

0 投票
1 回答
260 浏览

macos - Kext 超类未启动 - IOSCSIPeripheralDeviceType00::start() 未返回

我正在IOSCSIPeripheralDeviceType00为连接 USB 的大容量存储设备编写一个 SCSI 直通设备驱动程序。该设备在固件中截获一些特定于供应商的 SCSI 命令并适当地回复,以及响应“正常”的 SCSI 命令。

我已经实现了这个 Wagerlabs 代码风格的驱动器。

init()and方法基本上是空的probe(),只是做一些记录和调用重复的超类函数。这些似乎工作正常(日志按预期显示,并且在插入设备时将驱动程序分配给设备)。但是,当调用驱动程序的start()方法时,先调用超类' start(),但直到拔掉设备才返回。

0 投票
1 回答
1810 浏览

macos - IOServiceOpen 返回 0x10000003 (MACH_SEND_INVALID_DEST)

当我尝试为驱动程序打开服务(根据SimpleUserClient 示例使用用户客户端)时,IOServiceOpen 返回 0x10000003(MACH_SEND_INVALID_REQUEST):

因此,该服务永远不会打开。

0 投票
1 回答
959 浏览

c - 编写 OS X 内核扩展来实现 Linux 的 SO_BINDTODEVICE 套接字选项

我希望能够通过特定的网络接口强制套接字。在 Linux 中,内核允许程序员通过设置所述套接字选项来实现这一点——但在 OS X 中,我一无所知。

因此我的标题问题 - 有可能吗?已经完成了吗?我不打算重新实现 IP 堆栈,只是启用绑定到接口选项。

0 投票
1 回答
222 浏览

macos - Integrity checks for kernel extensions in OSX

is there any way to check for the integrity and validity of a Kernel Extension in OS X? I have to make sure that an extension which bundle name starts with com.apple is a real extension from Apple. Maybe a certificate or whatever footprint that reveal if the kernel extension comes from Apple or Not.

0 投票
1 回答
796 浏览

macos - 获取驱动程序父级(或祖先)的属性

我有一个用于连接 USB 的自定义 SCSI 设备的驱动程序,它实现了一些特定于供应商的命令。每个 USB 设备承载多个 SCSI LUN。这工作非常愉快,但是根据设备对 SCSI LUN 进行分组存在问题,因为从IOSCSILogicalUnitNub级别向下(我的驱动程序继承自),没有将 LUN 链接在一起的识别功能(有 SCSI 逻辑单元号,但是这些对于每个新设备都会发生冲突;它们都有一个单元 0x0)。

我想做一些事情,比如根据 USBlocationID字段(或任何其他唯一键)链接它们,但我不知道如何在仅给出io_service_t匹配的 SCSI 驱动程序的情况下获取父 USB 设备。这也最好在应用程序端完成,而不是在驱动程序中完成,因为应用程序需要跟踪哪个服务具有哪些 LUN 以及由哪个处理程序实例打开。

IO Registry 中的层次结构是:

0 投票
1 回答
355 浏览

macos - mach内核,锁的最佳用法

我正在寻找有关如何设计 Mac OS X 网络内核扩展的特定部分以尽可能快速和高效的建议或指示——C 语言。

描述: 我有两组 TAILQ 列表。一个用于 A 型结构,另一个用于 B 型结构。大多数情况下,我分别处理它们,因此每个都有一个 lock_mtx。有时,我需要修改 A,然后是 B,然后同时修改两者。它看起来像这样:

我不熟悉锁的使用。所以我只看到两个选项: 1. 使用一个锁来保护两个列表。那将是一种浪费,因为它会阻止仅修改 A 的函数在执行时仅执行修改 B 的函数(反之亦然)。

  1. 依次获取两个锁,然后释放它们。那会给我:

.

我认为这将是相当昂贵的,拿走所有这些锁。有没有更好的方法来保护 A 和 B 的交叉修改?

感谢您的建议。

0 投票
1 回答
3707 浏览

xcode - kextutil:没有为 com.apple.iokit.IOUSBFamily 找到兼容的依赖项

在 Mac-pro 10.6.8 上加载我的驱动程序时 Kextutil 失败,但在 iMac 10.6.8 上没问题。如果你能告诉我一些相关的事情,你将不胜感激!谢谢

信息:

0 投票
3 回答
1297 浏览

macos - 端口上的 Cocoa 监控数据包

我想监视 Mac OS X 中特定端口上的数据包。能够读取它们的内容并有时更改它们的内容(如果可能的话)。我想知道是否可以通过编写 KEXT 或者我可以在应用程序中执行此操作并立即显示结果。我将不胜感激有关我可以用来实现这一目标的库和方法的任何信息。

0 投票
2 回答
603 浏览

java - 是否可以在应用程序中捆绑 kext?

我有一个需要 kext 的 Mac OS X 应用程序(也是由我构建的)。我想将kext“捆绑”到应用程序中,这样当用户运行应用程序时,会自动加载kext(当然,可能会显示管理员密码提示)。有可能,还是我需要在安装时安装 kext?