#macos #kernel #darwin #api-bindings

无std mach2

访问OSX底层Mach 3.0内核用户空间API的Rust接口

3个版本

使用旧的Rust 2015

0.4.2 2023年12月19日
0.4.1 2022年6月7日
0.4.0 2021年11月15日

#15 in 操作系统

Download history 164185/week @ 2024-04-29 161773/week @ 2024-05-06 168412/week @ 2024-05-13 128280/week @ 2024-05-20 127578/week @ 2024-05-27 131315/week @ 2024-06-03 125767/week @ 2024-06-10 126576/week @ 2024-06-17 136073/week @ 2024-06-24 117235/week @ 2024-07-01 127456/week @ 2024-07-08 139623/week @ 2024-07-15 160656/week @ 2024-07-22 158075/week @ 2024-07-29 158196/week @ 2024-08-05 149760/week @ 2024-08-12

633,266 每月下载量
1,378 个crate中使用 (40 直接)

BSD-2-Clause OR MIT OR Apache-2.0

88KB
2K SLoC

mach2

Latest Version docs

Rust接口,用于访问在macOS中通过libSystem(以及libsystem_kernel)链接的Mach 3.0内核在/usr/include/mach中暴露的用户空间API。

该库不暴露Mach 3.0内核在SDK/系统/库/框架/内核.framework/Versions/A/Headers/mach中暴露的内核空间API。

也就是说,如果您正在编写内核驻留的设备驱动程序或其他内核扩展,您必须使用其他东西。用户空间内核API通常与内核空间API不兼容,即使在它们匹配的情况下,它们有时也可能在ABI上不兼容,使用此库可能会导致未定义行为

使用方法

将以下内容添加到您的Cargo.toml中,以有条件地包含对支持它的平台的mach。

[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.mach]
version = "0.4"

可用的crate功能

  • 不稳定(默认禁用):公开新更改的API。启用此功能可能会带来破坏性更改(请参阅破坏性更改策略)。

破坏性更改策略

当最新工具链上的项目被更改/删除时,我们执行以下步骤

  1. 弃用现有项目
  2. 不稳定功能下声明新项目
  3. 自发布包含该更改的新版本的一个月或更长时间后,删除/更改较旧的项目

例如,如果const FOO值从3更改为4,我们首先在不稳定下公开新的,即4。因此,不稳定用户应该在弃用后的第一个版本中注意到更改。一个月或更长时间后,所有用户都应该注意到。

示例

示例可以在本仓库的examples目录中找到。

由于 examples/dump_process_registers.rs 使用了需要提升权限的 task_for_pid() 函数,因此需要禁用系统完整性保护(SIP)并且成为 admin_developer 组的成员才能运行示例。然而,请注意,禁用 SIP 并不鼓励,并且仅应出于开发/调试目的进行。

  1. 重启 macOS 至恢复模式。
  2. 点击 Options
  3. 登录您的用户。
  4. 在菜单中点击 Utilities,然后 Terminal
  5. 在终端中键入以下命令以禁用 SIP:csrutil disable(要重新启用 SIP,请使用 csrutil enable)。
  6. 重启您的计算机。

要运行示例,请按以下步骤构建:

cargo b --example dump_process_registers

然后使用 sudo 运行。

sudo ./target/debug/examples/dump_process_registers

平台支持

以下表格描述了当前的 CI 设置

目标 最小 Rust XCode 构建 测试 运行
x86_64-apple-darwin 1.33.0 10.3.0 - 13.1.0
aarch64-apple-darwin nightly 13.1.0 - -
aarch64-apple-ios nightly 13.1.0 - -
aarch64-apple-ios-sim nightly 13.1.0 - -
x86_64-apple-ios nightly 13.1.0 - -

许可证

本项目受以下任一许可证的许可:

任选其一。

贡献

除非您明确声明,否则您提交给 mach 的任何贡献,如 Apache-2.0 许可证中定义的,将按上述方式三重许可,不附加任何额外的条款或条件。

要本地测试库,运行:

TARGET=x86_64-apple-darwin RUST_VERSION=nightly ./ci/run.sh

其中您可以将 TARGETRUST_VERSION 替换为您要测试的目标(例如 aarch64-apple-darwin)以及您要用于测试的 Rust 版本(例如 stable1.33.0 等)。

依赖项