问题标签 [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 - Kext 驱动程序找不到符号 OSPrintBacktrace
当我的 iokit 命令之一被调用时,我正在使用以下函数。它定义在
但是,我的 kext 似乎我的 kext 无法加载,因为它找不到这个符号..
虽然它确实存在于内核二进制文件中
谁能告诉我我在这里想念什么?
macos - 如何启动 XNU 内核?
我已经成功地从源代码编译了 XNU 3789.31.2,但不知道如何启动它并让它运行。有没有详细的说明?
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 设置还有另一个地方?
谢谢
xcode - 使用 Xcode 调试 Kext
让我的 lldb 调试器在 xcode 下运行会很棒——它适用于用户空间应用程序,但是 Kext 呢。
在用户空间中,如果您可以在以下场景之一中使用调试器:
- 从您的项目开始新的流程。
- 等待具有特定名称的进程出现。
- 连接到现有进程(根据 IP)。
所有这些选项都不需要 lldb 命令行来启动,因此可以很容易地从 xcode 配置图表中触发。
然而,在内核扩展调试中,情况就完全不同了,因为必须触发kdp <remote ip>
才能连接正在调试的机器。从 xcode 这样做是可选的吗?
或者,我想了解其他能够执行此任务的 lldb gui 包装器。
谢谢
macos - 调试 kext 时读取用户空间地址
我想lldb
在调试远程机器驱动程序(kext)时通过kdp
. 我知道在代码中我可以使用copyin
它来将代码移动到内核空间并轻松读取它,因此当我尝试直接读取用户内存时它失败了:
在运行时调试会话期间是否有一些替代方法copyin
可以将我的数据转换为我可以从调试器中读取的地方?
谢谢
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) 进行。
谢谢
c - Mach 寻呼机将文件加载到 mmap 文件中的内存
在我的问题here之后,我扩展了我对从文件到内存的实际读/写的研究,在调用文件mmap时反之亦然。与 READ 和 WRITE 系统调用不同,MMAP 情况不同,如下面的回溯中所示:
似乎马赫寻呼机正在这里完成所有工作(将文件读入内存)。我知道load_machfile
通常vn_rdwr
在加载新图像时使用读取文件部分,但我在函数树execve
中找不到任何同义词。vnode_pager_map
所以我的问题是哪种方法实际读取 mmap sys 调用中的文件内容?
macos - Mac OS X 上的 mmap 系统调用有什么问题?
我试图在 Mac OS X 上编写一个简单的应用程序,只使用系统调用,没有标准库。
主程序
开始.s
可以看到,应用基本上体现了简单echo
。当我不带参数运行程序时,它成功完成,所以我假设exit
call 有效。但是当我使用任何参数运行它时,它会以Segmentation fault: 11
. 据我现在了解,当mmap
被调用时,内核返回奇怪的值:9。我认为 9 不是正确的地址,但我无法理解我的错误,因为根据文档,传递给的所有值syscall
都是正确的。系统调用号码取自这里。
macos - KextManagerLoadKextWithIdentifier 无法加载 kext。
我正在尝试使用KextManagerLoadKextWithIdentifier
由于以下原因失败的用户空间方法加载我的 kext。
我的驱动程序确实是未签名的,但我已将 boot-args 设置kext-dev-mode=1
为接受未签名的驱动程序。
如果我尝试使用kextload
它从终端加载驱动程序,它正在工作。
知道为什么KextManagerLoadKextWithIdentifier
不工作吗?
macos - 有没有办法用 osx 上的 kext 中的符号记录堆栈跟踪?
我想用它来调试内核驱动程序,但我会尽量避免向所有函数添加日志记录。OSReportWithBacktrace 似乎工作,但我需要符号。