问题标签 [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 回答
504 浏览

c - Mac OS X:如何通过内核扩展获得 TCP 连接的 tcpcb 结构?

我想提供一个用户空间函数,通过实现内核扩展来获取 TCP 连接统计信息。通过检查 TCP 源,我看到 tcpcp 结构包含这样的统计信息。给定来自用户空间的套接字句柄,我如何通过内核扩展获取关联的 tcpcb 结构并将统计信息返回给用户空间?

0 投票
1 回答
451 浏览

c - mach_timebase_info 的可能返回值是什么?

我知道 mach_timebase_info 的返回类型为 kern_return_t,但我无法找到指定可能返回值的文档。我在哪里可以找到这些信息?

0 投票
1 回答
54 浏览

c - What is the resolution of xnu's clock_get_time for CALENDAR_CLOCK?

What is the resolution of the xnu kernel function clock_get_time for CALENDAR_CLOCK?

0 投票
1 回答
1788 浏览

macos - 如何找到与特定 OS X 版本对应的 xnu 版本?

我正在尝试在旧版本的 OS X 中查找支持的系统调用列表。

对于 XNU 内核的每个版本,都有一个syscalls.master文件可以提供我想要的内容(例如,这里有一个用于 XNU 2782.20.48 的文件)。我可以看到我当前的 XNU 版本uname -a。但我不知道如何找到 OS X 历史版本中包含的 XNU 版本。

是否有将 OS X 版本号(例如 10.9.0)或内部版本号映射到 XNU 版本号的列表?

0 投票
2 回答
904 浏览

macos - XNU:在 kext 中获取进程启动和清理通知

在内核扩展中启动和退出进程时收到通知的最佳方式是什么?

我知道我可以用它KAuth来订阅一个进程创建(KAUTH_VNODE_EXECUTE)。订阅进程清理怎么样?

0 投票
1 回答
1342 浏览

macos - 从 OSX 10.10/10.11 内核检索进程路径

我想从 kext 中的 PID 中检索进程的路径,如下所示:Get name from PID? 但是,sys/proc_info.h不再libproc.h可用(afaik)。

有没有其他方法可以从 kext中检索proc_info进程?struct proc *p

0 投票
2 回答
63 浏览

linux-kernel - 在另一个 POSIX 内核上运行 Linux 可执行文件

理论上是否可以在第二个(例如达尔文的 XNU)上执行为一个 POSIX 内核(例如 Linux)构建的,
为什么它不可能?

如果是因为库和/或共享对象,也许可以只留下内核,它是整个第二个操作系统的依赖项,然后从第一个开始使用其他所有东西?

所以你将只有来自第二个操作系统的内核和驱动程序,你可以 chroot 到某个地方,你将能够首先运行任何可执行文件?

或者我们可以制作某种动态包装器或静态翻译器吗?

UPD:好的,我发现了类似的东西,但只是粗略的建议,也许有人可以说得更清楚些?

0 投票
2 回答
174 浏览

sockets - 在套接字连接时从 kext 验证客户端

我正在为 OS X 上的额外安全层构建一个 kext(围绕 KAtuh 构建)。我在用户空间中使用一个通过套接字连接到 kext 的客户端(按照 Apple 的建议),并且基本上控制着 kext。因为该产品应该为 OS X 提供额外的安全性,所以它对攻击“尽可能安全”是很重要的。一种攻击向量如下:A malicious process impersonates the client and sends malicious control data to the kext, disabling the security mechanism.. 我想通过在连接时进行身份验证来防止这种情况。以下是我的解决方案:

  • 以 root 身份运行客户端,使用CTL_FLAG_PRIVILEGEDflag 确保只有 root 客户端可以连接到 kext。我不确定我是否想让我的客户端以特权模式运行(再次:额外的攻击向量)。

  • 让 kext 只连接到一个客户端。但是,这很容易绕过。

理想情况下,我想验证通过static int ctl_connect(kern_ctl_ref ctl_ref, struct sockaddr_ctl *sac, void **unitinfo). 我怎样才能做到这一点?

我也可以在 中进行数据包身份验证static int ctl_set(kern_ctl_ref ctl_ref, u_int32_t unit, void *unitinfo, int opt, void *data, size_t len),但是,我必须想出一个动态共享密钥。我在考虑secret = SHA256(getUDID()),但是 AFAIK 没有可用的加密 KPI,也没有getUDID()从内核空间获取的方法。

关于对客户进行“正确”身份验证还有其他想法吗?

0 投票
1 回答
148 浏览

macos - 从 XNU 内核驱动程序更改 vm 页面保护属性

作为实验的一部分,我需要从非 IOKit kext 使只读页面在内核地址空间中可写。在用户模式下,我可以执行 vm_protect,但是关于如何在内核模式下执行此操作的信息非常少(或者我完全失明)。有没有要求这样做?

0 投票
1 回答
4996 浏览

macos - OS X 内核恐慌诊断。如何翻译回溯地址

我正在调试导致我的 Mac 上的内核转储的驱动程序。它显示了由一系列地址组成的长回溯:

我假设由于计算机重新启动,地址转换现在没有用了,因为每次启动迭代后内存映射可能不同。

是否有任何选项可以将相关方法与每个地址相匹配,或者提前设置适当的配置?谢谢