问题标签 [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.
macos - Sierra 上的 kprintf(内核 printf)日志在哪里?
有很多页面解释它,但我找不到。我发现许多文章只适用于 El Capitan 和旧系统。
我现在无法使用 fwkpfv,因为我没有合适的加密狗。我的客户要给我一台支持火线的二手 MacBook。
我的内核扩展使我的盒子恐慌。很奇怪,如果我的同事构建了我的扩展,它工作得很好。我仍然一头雾水。
authorization - 无法对被阻止到 /usr/libexec/amfid 的文件运行 execve
我想使用 Kauth 来阻止某些文件被除我之外的其他进程执行。但是,似乎即使我也无法运行该进程,因为我也阻止了来自 amfid 的文件(移动文件完整性守护进程,有趣的是它也存在于 macOS 中)。
这是该过程的以下路径/usr/libexec/amfid
我的假设正确吗?amfid 是否需要在执行前访问任何 mach-o 文件以进行检查?
c - 在 macOS 内核扩展中高效使用同步
我在我的 macOS 内核扩展中使用同步 KPI 来验证一个功能是否在另一个功能启动之前完全执行(当然这两个功能都在不同的线程中执行)。
这些是同步方法:
channel
指向表示第一个函数的布尔值的指针也已完全执行。
这是我在第一个函数中的实现:
在我等待channel
设置的另一个功能上:
但是,如果第一个函数在第二个函数之前终止(这是常见的情况),我会等待超时ts
。
我的问题是是否有办法跳过已经发生msleep
的情况wakeup
?
谢谢,
macos - 通过 IOKIt 命令传递 CFDictionary
我正在寻找一种通用方法来配置从用户空间代理到内核的参数,因为没有 Mac 相当于 Windows 注册表,驱动程序可以使用ZwQueryValueKey
命令直接访问此表中的任何键。
因此,我想通过CFDictionary
.
有IOConnectCallMethod
一种方法可以传递输入指针,但问题是我是否可以传递一个CFDictionary
orCFDictionaryRef
而不是一个简单的结构。
我看到有一些 IOkit 命令可以让您直接传递 CFDictionaryRef,例如,IOServiceGetMatchingService
但这些命令不是用于驱动程序模块,而是用于管理驱动程序的实体。
xcode - kextutil 说我的内核扩展签名无效,但代码签名说它是有效的。它不加载
这是我第一次尝试签署内核扩展,所以我对自己做错的可能性持开放态度。
我向 Apple 申请了内核签名证书。我被要求填写一个表格,证明我确实需要创建一个内核驱动程序,而不是一个与 IOUserClient 通信的用户空间驱动程序。
它不会在启动时加载 - 它需要,因为它是一个图形驱动程序。
帮助我 O Stackoverflow-Wan。你是我唯一的希望!
macos - 如何在 Mac 内核扩展代码中获取当前进程 ID?
我最初试图getpid()
在 OS X/macOS 的内核模块中使用,有没有办法获取我的 kext 在内核中运行的进程的 PID(进程 ID)?是否有我可以使用的现有函数或变量?
macos - 如果在启动时连接了加密狗,我的 USB 功能驱动程序不会加载
这是今天新的。一段时间以来,它一直运行良好。
正常运行时,驱动程序会匹配 USB 设备的产品 ID 和供应商 ID,然后加载并运行。
它是一个 USB 视频适配器,因此在正常操作下,在登录之前会看到桌面的模糊图像,然后您会看到第二个屏幕,该屏幕可以正常使用显示首选项。
但就在今天,如果在启动时连接了加密狗,则驱动程序不会加载,USB 连接的显示器也不会显示图像。
如果我拔下加密狗,然后重新插入,它可以工作。
如果在启动过程中没有连接加密狗,然后在到达桌面后插入,它可以工作。
如果在启动期间连接了加密狗,然后我使用 kextutil 加载它,kextutil 报告成功但它不加载。
我推测这是匹配的问题,但不明白可能出了什么问题。
这是一个签名的驱动程序,现在在/Library/Extensions
;以前它是未签名的,在 中/System/Library/Extensions
,系统完整性保护被禁用。
产品中还有两个不是 USB 功能驱动程序的驱动程序。他们加载得很好。所有三个驱动程序共同创建一个虚拟帧缓冲区,然后显示它。
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
成功和控制驱动程序卸载的时间。
谢谢
c++ - 在 macOS 中获取关机和重启通知
我希望我的 IOKit 驱动程序能够收到power off
事件通知restart
。幸运的是,IOKit 提供了这种使用IOService::systemWillShutDown
方法的通知,它应该被覆盖并包含我的逻辑。
这是Apple 技术文档中的一个示例:
但是,该事件未按预期显示。
可能错过了对电源平面阶段的注册(尽管没有明确说明它是从 覆盖该方法的先决条件systemWillShutDown
。IOService
)
为了获得重启和断电的电源事件,是否必须加入 PMTree?
在尝试调试问题时,我在方法中放置了断点,IOService::systemWillShutdown
并且在关闭时确实多次使用以下回溯调用它:
因此,似乎还有其他内核扩展确实会收到此调用,并且它们已在其中列出gPMHaltArray
-但我的 kext 可能不存在..
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 如何在下面工作的专家,所以也许我错过了一些东西。感谢帮助 :) !
多米尼克