问题标签 [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 投票
0 回答
677 浏览

c - 从内存中的mach_header中找到Mach-o的符号地址

我在内存中加载了一个 mach-o 文件(通过mmap),需要获取与符号对应的二进制文件中的地址,比如mySym. 我找到了一个名为的函数NSLookupSymbolInImage,并认为我可以使用它,然后使用它NSAddressOfSymbol来获取实际地址,但存在一些问题:

  • 这些功能已弃用
  • 在查看 的来源时NSLookupSymbolInImage,似乎mach_header传入的必须已经由 dyld 加载。由于我自己加载了二进制文件,因此这种方法可能行不通。

现在,我知道如果必须,我可以解析mach_header自己并以这种方式找到符号,但我想认为有更好的方法来做到这一点。

基本上,我想知道是否有比手动操作更简单的方法来从 dyld 未加载的 mach-o 文件中获取符号的地址。

0 投票
1 回答
307 浏览

macos - 仅使用 HFS+ 格式化设备时,OS X 上的虚拟 SCSI 磁盘设备驱动程序会导致崩溃

我目前正在使用 IOKit 开发一个虚拟 SCSI 设备驱动程序。我的驱动程序加载正常,我可以使用 ExFat、FAT32 或 HFS+ 格式化我的设备。

我还可以使用带有任何这些文件系统的 CLI 将文件复制到我的虚拟设备或从我的虚拟设备复制文件。使用 ExFat 或 FAT32,我还可以使用 Finder 从我的虚拟设备中复制或查看文件,但在驱动器格式化为 HFS+(日志式)时不能。

使用 HFS+ 时,我遇到与 Finder、Spotlight 或 Preview 相关的内核恐慌。例如,当系统在文件复制到磁盘后尝试预览文件时,就会发生这种情况。这是来自内核恐慌的示例日志:

这是上述恐慌日志的堆栈跟踪:

我很难确定问题,但如上所述已缩小到 HFS+。HFS+ 有什么特别的地方会导致这种情况吗?

由于问题与 VFS 和分页(?)有关,我开始怀疑我是否正确处理了 IOMemoryDe​​scriptors(我相信我是,基于我在 Apple 文档中读到的内容)。有人遇到过类似的问题吗?这通常表示特定类型的问题吗?

更新:我已经验证在 HFS+ 中禁用日志不会对上述结果产生影响。

UPDATE2:恐慌日志每次都是一致的。仅当满足以下所有条件时才会发生恐慌:

  • 使用 HFS+
  • 文件被复制到设备(对于单个文件 > 几 MB)
  • 文件是使用 Finder 复制的(但不是终端,例如)

当第一个文件完成复制到设备时,内核始终会出现恐慌。可以复制许多等于或大于几 MB 的小文件而不会引起恐慌。我什至可以使用终端将文件大文件(> 30 MB)复制到卷中并在 Finder 中读取/打开它们。

0 投票
1 回答
213 浏览

c - 将 fpirntf() 添加到 xnu 内核 tcp_xxx.c,找不到 stdio.h

在stackoverflow上向大家问好!

我正在尝试将 fpirntf() 添加到 XNU 内核 tcp_xxx.c 文件中,因此当 TCP 移动时,它可以将参数打印到文件中,以便更好地了解 TCP 的工作原理,但会发生如下致命错误:

看起来 xnu 源代码中没有 stdio.h,为了解决这个问题,我重新安装了 xcode 5.0.2(仅适用于 xnu-2422)并输出 mach_kernel 能够启动;我尝试在终端中通过“xcode-select --install”安装命令行工具,但都没有工作。顺便说一句,如果我在没有#include 的情况下添加 printf() 它不会出错,它看起来打印函数是由名称不是 stdio.h 的文件定义的。

由于我的意思是在文件中记录 TCP 参数(例如拥塞窗口大小和下一个序列号等)如何变化,所以如果有任何方法可以做到这一点,请告诉我,我对 xnu 和 C 完全陌生编程。

最好的祝福。

0 投票
1 回答
515 浏览

xcode - 构建 xnu 并使用它 @Xcode

我目前正在 osx 中开发驱动程序,但在我的 Xcode 项目中使用 XNU 文件时遇到问题。我根据此处的说明构建了 XNU:http: //shantonu.blogspot.co.il/2013/10/building-xnu-for-os-x-109-mavericks.html

它成功构建。

我应该将它安装在 XCODE 的特定目录中以查找库和头文件吗?

谢谢。

0 投票
1 回答
115 浏览

ios - 默认冰柜 (iOS)

Levin 在他的书Mac OS X and iOS internals: To the Apple's Core 中有一章。与可用于虚拟内存管理的默认冻结器相关。据说它是在osfmk/vm/default_freezer.c

在撰写本文时,这仍然不完整。有谁知道这是否在较新版本的 iOS 中实现?我没有找到很多有关此的文档。

0 投票
1 回答
1570 浏览

macos - 驱动程序导致睡眠唤醒失败

作为一项安全研究,我正在编写一个自定义IOKit驱动程序。驱动程序通过电源层将自身注册到它所依赖的驱动程序。(USB 服务)。setPowerState正在调用该函数,并且驱动程序正确关闭了自身。

问题是,它会随机导致睡眠唤醒失败问题,并且机器会自行重启。实际上重置发生在机器进入睡眠后唤醒期间(显然试图休眠)

问题是,我该如何调试或解决它?我正在使用火线内核调试来查看正在发生的事情,但是调试器和断点导致睡眠计时机制出现延迟,一切都一团糟。

关于这个问题,互联网上的数据相当薄弱,但充满了关于 OSX 机器在干净的机器中导致睡眠唤醒失败的抱怨。

我正在各种机器和内核版本上对其进行测试,并且它是持久的。

任何线索都会有所帮助。

编辑:附加代码

0 投票
2 回答
757 浏览

c - 通过 C API 加载内核扩展?

是否可以通过C API加载内核扩展( )而不是使用调用?kextsystem()

0 投票
0 回答
381 浏览

c - 如何在 mach 内核中获取 cpu 使用率?

我尝试在 mach 内核中使用 cpu,但我总是得到相同的输出。我做错了什么?

获取 CPU 负载统计信息

收集 CPU 滴答声

谢谢!

0 投票
2 回答
512 浏览

macos - 编译 XNU-2782.1.97 时出错

我尝试为我在 OSX Yosemite 10.10.3 上的 Mac 编译 XNU-2782.1.97,但在编译结束时出现以下错误。

我认为通常我拥有做这件事所需的一切。

0 投票
0 回答
250 浏览

macos - kevent & USB serial ports

I'm having trouble using kevent on mac with a USB serial console. I've narrowed it down to:

When I run this and unplug the USB device in the middle of the call to kevent(), I get:

My understanding is that the contents of the event translates to:

FD 4, EVFILT_READ, EV_ADD, 6 bytes remaining on fd. But the ioctl() fails (since the device was removed), and errno is also 6, so it seems as if event.data is returning the errno, not the bytes remaining.

How can I differentiate between the normal read case and the case where the device has been removed? The filter, flags & fflags appear the same in both cases.

Additional Information

If I switch from opening the serial console to a pipe, and write a single byte followed by closing the write end, I get:

This is what I expect, since 0x8000 is EV_EOF.