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

macos - Kext 驱动程序找不到符号 OSPrintBacktrace

当我的 iokit 命令之一被调用时,我正在使用以下函数。它定义在

但是,我的 kext 似乎我的 kext 无法加载,因为它找不到这个符号..

虽然它确实存在于内核二进制文件中

谁能告诉我我在这里想念什么?

0 投票
1 回答
595 浏览

macos - 如何启动 XNU 内核?

我已经成功地从源代码编译了 XNU 3789.31.2,但不知道如何启动它并让它运行。有没有详细的说明?

0 投票
2 回答
228 浏览

c - 在内核打印输出中显示指针值(而不是) 在运行 OS X 10.12 的并行虚拟机上

我正在开发一个在 10.12.4 VM 下运行的 Kext(我使用并行),我想启用指针打印输出(目前所有指针都被隐藏并显示/var/log/system.log<ptr>

在 10.12 之前,可以选择通过设置直接放弃调试限制nvram csr-active-config=%ff%00%00%00。但是,现在无法csr-active-config直接设置,而是通过csrutil disable恢复模式进行设置。不幸的是,它并没有禁用所有 SIP 功能,并且指针仍然隐藏。

幸运的是,以下线程提供了解决方法:

或者,可以通过设置 csr-active-config=ff%00%00%00 完全禁用 CSR。对于 VM,这可以通过引导到恢复分区、运行 csrutil clear 以完全删除 csr-active-config 变量和 nvram Xsr-active-config=ff%00%00%00 来实现。然后关闭 VM,并使用十六进制编辑器更改 nvram 文件中的 X -> c。这将允许 -show_pointers 引导参数工作。

我正在使用 Parallels,并尝试找到 nvram 设置的位置。我看到了一个有希望的文件,但不幸的是,在我按照上面引用的段落中的说明进行操作后,我NVRAM.dat无法跟踪该字符串。Xsr-active-config

也许 nvram 设置还有另一个地方?

谢谢

0 投票
0 回答
533 浏览

xcode - 使用 Xcode 调试 Kext

让我的 lldb 调试器在 xcode 下运行会很棒——它适用于用户空间应用程序,但是 Kext 呢。

在用户空间中,如果您可以在以下场景之一中使用调试器:

  1. 从您的项目开始新的流程。
  2. 等待具有特定名称的进程出现。
  3. 连接到现有进程(根据 IP)。

所有这些选项都不需要 lldb 命令行来启动,因此可以很容易地从 xcode 配置图表中触发。

然而,在内核扩展调试中,情况就完全不同了,因为必须触发kdp <remote ip>才能连接正在调试的机器。从 xcode 这样做是可选的吗?

或者,我想了解其他能够执行此任务的 lldb gui 包装器。

谢谢

0 投票
1 回答
287 浏览

macos - 调试 kext 时读取用户空间地址

我想lldb在调试远程机器驱动程序(kext)时通过kdp. 我知道在代码中我可以使用copyin它来将代码移动到内核空间并轻松读取它,因此当我尝试直接读取用户内存时它失败了:

在运行时调试会话期间是否有一些替代方法copyin可以将我的数据转换为我可以从调试器中读取的地方?

谢谢

0 投票
1 回答
406 浏览

c - xnu中的vnode和文件描述符,文件操作向量存放在哪里

在 xnu 我们有vnode_t代表全局文件的实体。

每个进程都可以通过设置新的文件描述符并在 fg_data 下设置 vnode 来访问文件(假设它具有正确的权限)

vnode 包含所有相关操作的基本操作列表,并根据文件的 FS 进行设置。即HFS+ 驱动程序实现这样的向量并相应地设置它的vnode。

这是一个用于可能在 vnode 上操作的所有操作的函数指针的向量。

此外,我们还有 fileops 结构,它是文件描述符 (fg_global) 的一部分,它描述了这些函数的最小子集:

这是一个典型的定义:

我们在这里设置:

我看到在本地文件系统(HFS +)下读取常规文件时,它通过 file_descriptor 而不是 vnode ...

我的问题是为什么需要这种对偶性,在哪些情况下操作通过 file_descriptor 向量 (fg_ops) 进行,在哪些情况下操作通过 vnode 向量 (vp->v_op) 进行。

谢谢

0 投票
1 回答
140 浏览

c - Mach 寻呼机将文件加载到 mmap 文件中的内存

在我的问题here之后,我扩展了我对从文件到内存的实际读/写的研究,在调用文件mmap时反之亦然。与 READ 和 WRITE 系统调用不同,MMAP 情况不同,如下面的回溯中所示:

似乎马赫寻呼机正在这里完成所有工作(将文件读入内存)。我知道load_machfile通常vn_rdwr在加载新图像时使用读取文件部分,但我在函数树execve中找不到任何同义词。vnode_pager_map

所以我的问题是哪种方法实际读取 mmap sys 调用中的文件内容?

0 投票
1 回答
924 浏览

macos - Mac OS X 上的 mmap 系统调用有什么问题?

我试图在 Mac OS X 上编写一个简单的应用程序,只使用系统调用,没有标准库。

主程序

开始.s

可以看到,应用基本上体现了简单echo。当我不带参数运行程序时,它成功完成,所以我假设exitcall 有效。但是当我使用任何参数运行它时,它会以Segmentation fault: 11. 据我现在了解,当mmap被调用时,内核返回奇怪的值:9。我认为 9 不是正确的地址,但我无法理解我的错误,因为根据文档,传递给的所有值syscall都是正确的。系统调用号码取自这里

0 投票
0 回答
250 浏览

macos - KextManagerLoadKextWithIdentifier 无法加载 kext。

我正在尝试使用KextManagerLoadKextWithIdentifier由于以下原因失败的用户空间方法加载我的 kext。

我的驱动程序确实是未签名的,但我已将 boot-args 设置kext-dev-mode=1为接受未签名的驱动程序。

如果我尝试使用kextload它从终端加载驱动程序,它正在工作。

知道为什么KextManagerLoadKextWithIdentifier不工作吗?

0 投票
1 回答
453 浏览

macos - 有没有办法用 osx 上的 kext 中的符号记录堆栈跟踪?

我想用它来调试内核驱动程序,但我会尽量避免向所有函数添加日志记录。OSReportWithBacktrace 似乎工作,但我需要符号。