问题标签 [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.
kernel - Mach vm_read 未返回 OSX 10.8.2 的预期值
我最近刚搬到 UNIX 平台,目前正在研究操作系统。现在,我对 XNU 的设计/实现特别感兴趣,目前的主题是进程和内存。
我有这个代码片段,它允许我的可执行文件从另一个进程获取任务端口
我知道 Mac OSX 10.8.2 有 ASLR,所以我运行的目标进程是通过 gdb 调用的。
我还可以在 GDB 内部验证该地址是否0x100000000
包含 Mach-O 的幻数。
但是,当我的程序尝试读取目标进程的内存时,它只返回随机值,而不是我期望的幻数(它是随机的)。
2157 是目标 PID,1103 是任务端口以及来自的结果mach_error_string
。我也尝试了该vm_read
功能,但行为仍然相同。
installation - xnu安装时总是有很多xcrun错误(OSX 10.8.3)
我搜索了很多网站来安装 xnu 内核。但是,我在安装 xnu 时出现了一些错误。
Xcode 版本:4.6(已安装命令行工具)
XNU 版本:xnu-2050.22.13
dtrace 版本:dtrace-96
这是错误:
xcrun:错误:无法找到实用程序“ctfconvert”,不是开发人员工具或在 PATH
xcrun:错误:无法找到实用程序“ctfmerge”,不是开发人员工具或在 PATH
我使用“make install”来安装 dtrace,但它也显示错误。请帮我
linux - Mac OS X:当通过 Unix 域数据报套接字发送 fd 时,recvmsg 返回 EMSGSIZE
我有一段代码使用 Unix 域套接字和 sendmsg/recvmsg 在两个进程之间发送 fd。此代码需要在 Linux 和 Mac 上运行(两个平台分别编译)。我正在使用 SOCK_DGRAM(数据报)套接字。
我在我的代码中一次发送一个 fd。在 Mac 上,以这种方式成功发送几个 fd 后,recvmsg() 失败并显示 EMSGSIZE。根据 recvmsg 的联机帮助页,只有在 msg->msg_iovlen <=0 或 >= Mac 上为 2048 的常量时才会发生这种情况。在我的代码中,我始终将 msg_iovlen 固定为 1,我在发送方和接收方上验证了这一点,并且还在 recvmsg() 错误后立即读取消息头。相同的代码在 Linux 上运行良好。
另一种可能性,从查看 XNU 内核源代码来看,接收器可能已经用完了 fd,但在错误发生之前我只发送了 4 或 5 个 fd,所以应该还有很多 fd。
如果我不发送 fd 只发送数据,则不会发生此错误。
打包控制消息的代码如下所示:
这是接收器:
有什么线索吗?提前致谢
macos - XNU 包含在 Kext 中
我正在研究应该可以访问struct proc->p_pid
字段的 Kext。问题是结构仅在 XNU 源中定义,所以我incomplete definition of type 'struct proc'
在编译过程中遇到了错误。
从我的角度来看,将 XNU 标头包含到我自己的项目中是一个难闻的解决方案,但是替代方法是什么?是将结构复制并粘贴到我自己的代码中吗?
macos - OS X 10.8 - 系统调用后的地址空间布局
出于实验原因,我在我的 OS X 10.8.2(运行 x86 LP64 内核)机器上完全禁用了交换,我知道这是一个坏主意。
当我从任何应用程序进行系统调用时,地址空间布局是什么样的?即现在,由于整个地址空间已连接(没有交换),我可以确定地访问内核中的任何有效用户地址并假设包含该地址的页面驻留在内存中吗?
我的理解是肯定的,但是读后我有点困惑,无论用户空间是 64 位还是 32 位 OS X 内核始终以 32 位模式运行,并且整个进程地址空间被切换出来,整个 4G 都被内核占用。这适用于 10.8.2 吗?如果是这种情况,那么我将无法从内核空间访问任何有效的用户空间地址,对吗?
iphone - 为 A4 iPhone/iPod 构建 XNU
我正在尝试使用 winocm 的 xnu 内核“ http://goo.gl/GuJnWn ”,我部分使用了这个http://goo.gl/TK6iUZ指南来获取 ctfconvert、ctfmerge 和 ctfdump。我想我有我需要的一切,但是在我所在的文件夹中输入 make 后出现此错误
macos - 睡眠和唤醒过程对 OSx 上的内核扩展有何影响
我想知道在 OSx 内核的睡眠和唤醒过程中发生了什么。
内核扩展是否接收到新的地址空间并重新开始其初始化过程,或者内核只是将扩展放回相同的地址空间?
内部内核扩展(例如 IOKit 驱动程序)的行为是否也相同?也许它们被加载到内存中的不同位置?
基本上问题是:我的驱动程序获得了 IOService 的接口,是否能够在睡眠后毫无问题地使用它的地址。
macos - 在不重新编译源代码的情况下覆盖 Mac XNU 内核
我想在没有连接交流适配器的情况下以翻盖模式使用 Macbook air。但是,当我合上盖子时,Mac OS 会强制系统进入睡眠状态。
我发现来自苹果开源的 XNU 内核的这一部分可能与这种行为有关:
iokit/内核/IOPMrootDomain.cpp
...
...
当然,我可以编译内核,但我怀疑它是否是最新的 Mavericks 内核。所以我想知道我是否可以通过插入动态库来覆盖内核空间函数,就像我们为用户空间函数所做的那样。
kernel - 调用指令页面错误
我正在尝试启动 Apple XNU 内核的自定义分支(可在此处获得源代码)。内核在start.s 的第 325 行出现三重故障。
检查QEMU 日志指向地址的页面错误0x10BFF8
。该地址是 PML4 之前的一个 4K 页 + 8 个字节,位于 address 0x10D000
。不过,问题是,我不知道为什么该call
指令会出现这样的页面错误。有人有想法吗?
macos - ctl_enqueuedata 内的 Osx 内核崩溃
我的代码使用 ctl_enqueuedata 进行内核用户通信。
我注意到有时(我无法真正重现它) - 我在 ctl_enqueuedata 内部崩溃了
当我使用调试器连接时,回溯如下
似乎套接字凭据为零。
怎么会这样。是内核错误还是我滥用了 ctl_enqueuedata?