问题标签 [xnu]

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 回答
2092 浏览

macos - Sierra 上的 kprintf(内核 printf)日志在哪里?

有很多页面解释它,但我找不到。我发现许多文章只适用于 El Capitan 和旧系统。

我现在无法使用 fwkpfv,因为我没有合适的加密狗。我的客户要给我一台支持火线的二手 MacBook。

我的内核扩展使我的盒子恐慌。很奇怪,如果我的同事构建了我的扩展,它工作得很好。我仍然一头雾水。

0 投票
0 回答
108 浏览

authorization - 无法对被阻止到 /usr/libexec/amfid 的文件运行 execve

我想使用 Kauth 来阻止某些文件被除我之外的其他进程执行。但是,似乎即使我也无法运行该进程,因为我也阻止了来自 amfid 的文件(移动文件完整性守护进程,有趣的是它也存在于 macOS 中)。

这是该过程的以下路径/usr/libexec/amfid

我的假设正确吗?amfid 是否需要在执行前访问任何 mach-o 文件以进行检查?

0 投票
2 回答
625 浏览

c - 在 macOS 内核扩展中高效使用同步

我在我的 macOS 内核扩展中使用同步 KPI 来验证一个功能是否在另一个功能启动之前完全执行(当然这两个功能都在不同的线程中执行)。

这些是同步方法:

channel指向表示第一个函数的布尔值的指针也已完全执行。

这是我在第一个函数中的实现:

在我等待channel设置的另一个功能上:

但是,如果第一个函数在第二个函数之前终止(这是常见的情况),我会等待超时ts

我的问题是是否有办法跳过已经发生msleep的情况wakeup

谢谢,

0 投票
1 回答
349 浏览

macos - 通过 IOKIt 命令传递 CFDictionary

我正在寻找一种通用方法来配置从用户空间代理到内核的参数,因为没有 Mac 相当于 Windows 注册表,驱动程序可以使用ZwQueryValueKey命令直接访问此表中的任何键。

因此,我想通过CFDictionary.

IOConnectCallMethod一种方法可以传递输入指针,但问题是我是否可以传递一个CFDictionaryorCFDictionaryRef而不是一个简单的结构。

我看到有一些 IOkit 命令可以让您直接传递 CFDictionaryRef,例如,IOServiceGetMatchingService但这些命令不是用于驱动程序模块,而是用于管理驱动程序的实体。

0 投票
1 回答
3259 浏览

xcode - kextutil 说我的内核扩展签名无效,但代码签名说它是有效的。它不加载

这是我第一次尝试签署内核扩展,所以我对自己做错的可能性持开放态度。

我向 Apple 申请了内核签名证书。我被要求填写一个表格,证明我确实需要创建一个内核驱动程序,而不是一个与 IOUserClient 通信的用户空间驱动程序。

它不会在启动时加载 - 它需要,因为它是一个图形驱动程序。

帮助我 O Stackoverflow-Wan。你是我唯一的希望!

0 投票
1 回答
769 浏览

macos - 如何在 Mac 内核扩展代码中获取当前进程 ID?

我最初试图getpid()在 OS X/macOS 的内核模块中使用,有没有办法获取我的 kext 在内核中运行的进程的 PID(进程 ID)?是否有我可以使用的现有函数或变量?

0 投票
1 回答
68 浏览

macos - 如果在启动时连接了加密狗,我的 USB 功能驱动程序不会加载

这是今天新的。一段时间以来,它一直运行良好。

正常运行时,驱动程序会匹配 USB 设备的产品 ID 和供应商 ID,然后加载并运行。

它是一个 USB 视频适配器,因此在正常操作下,在登录之前会看到桌面的模糊图像,然后您会看到第二个屏幕,该屏幕可以正常使用显示首选项。

但就在今天,如果在启动时连接了加密狗,则驱动程序不会加载,USB 连接的显示器也不会显示图像。

如果我拔下加密狗,然后重新插入,它可以工作。

如果在启动过程中没有连接加密狗,然后在到达桌面后插入,它可以工作。

如果在启动期间连接了加密狗,然后我使用 kextutil 加载它,kextutil 报告成功但它不加载。

我推测这是匹配的问题,但不明白可能出了什么问题。

这是一个签名的驱动程序,现在在/Library/Extensions;以前它是未签名的,在 中/System/Library/Extensions,系统完整性保护被禁用。

产品中还有两个不是 USB 功能驱动程序的驱动程序。他们加载得很好。所有三个驱动程序共同创建一个虚拟帧缓冲区,然后显示它。

0 投票
1 回答
415 浏览

c++ - 除非某些客户端保持连接,否则防止 IOKit 驱动程序在“kextunload”中关闭

我有一个具有一对多关系的 IOKit 基础驱动程序/守护程序项目(意味着多个客户端连接到单个驱动程序)。

核心驱动程序是一个 IOKit 对象IOService,它是从IOUserClient. 这些是用户空间客户端的代理(每个用户空间客户端一个)

我的目标是在具有root权限的命令的情况下防止驱动程序卸载kextunload,这样只有当最后一个客户端断开连接(进程终止或调用IOServiceClose)时,驱动程序才会自动关闭(无需kextunload手动执行)

为了检查我需要禁用/邮寄哪些 IOKit 命令,我已经用相关的打印消息包装了基本回调,并在连接 2 个客户端IOService的运行场景中观察了日志:kextunload

--

似乎即使我从每个IOUserClient提供者那里获取参考,并在 上释放这些参考IOUserClient::clientClose ,该kextunload命令仍然成功。

我发现实现目标的唯一方法是推迟::terminate命令并从::clientClose.

所以我删除了对的调用IOService::terminate,而是从IOUserClient::clientClose(). 这里是相关代码:

我想知道是否有任何不那么老套的方法来防止kextunload成功和控制驱动程序卸载的时间。

谢谢

0 投票
1 回答
519 浏览

c++ - 在 macOS 中获取关机和重启通知

我希望我的 IOKit 驱动程序能够收到power off事件通知restart。幸运的是,IOKit 提供了这种使用IOService::systemWillShutDown方法的通知,它应该被覆盖并包含我的逻辑。

这是Apple 技术文档中的一个示例:

但是,该事件未按预期显示。

可能错过了对电源平面阶段的注册(尽管没有明确说明它是从 覆盖该方法的先决条件systemWillShutDownIOService

为了获得重启和断电的电源事件,是否必须加入 PMTree?

在尝试调试问题时,我在方法中放置了断点,IOService::systemWillShutdown并且在关闭时确实多次使用以下回溯调用它:

因此,似乎还有其他内核扩展确实会收到此调用,并且它们已在其中列出gPMHaltArray-但我的 kext 可能不存在..

0 投票
2 回答
1833 浏览

c - Mac OS (10.13.1) task_for_pid for fork process "(os/kern) failure"

上次我尝试编写简单的基因模糊器(严格使用 Mac OS,只是为了好玩)。我的想法是这样的:

-> 控制分叉进程的主程序

--> 分叉进程从磁盘加载二进制代码并跳转到其中。

-> 父请求任务(task_for_pid(mach_task_self(),childPID,&task))

-> 父母试图捕捉陷阱(0xcc),检查我们以前是否去过那里,就像 AFL 工作一样(当然是简化)

--> child 加载一些原始二进制代码(在我的示例中必须是 System V ABI)

我收到如下错误:

运行.sh:

“仪器”出现在我的钥匙串中,并且始终信任代码唱歌,所以我认为不应该如此。

信息列表

当然,我的代码仅对特定情况有用,它会尝试对输入为字符串的一个函数进行模糊测试,并将其与其他字符串进行比较。

服务器.c:

为什么这会输出错误?是 fork 在 OSX 下如何工作的情况吗?那里有什么问题?我不是 osx 如何在下面工作的专家,所以也许我错过了一些东西。感谢帮助 :) !

多米尼克