7个版本
0.5.4 | 2024年3月1日 |
---|---|
0.5.3 | 2024年3月1日 |
0.5.1 | 2024年2月29日 |
0.4.4 |
|
在 操作系统 中排名 207
每月下载 86 次
在 4 个crate中使用(通过 perfmon)
190KB
4K SLoC
mach-sys: 从原始的 "mach" 分支,并合并自 "mach2" & "machx"。
是暴露在 /usr/include/mach
的 Mach 3.0 内核 用户空间 API 的 Rust 接口,该内核是 macOS 的基础,并通过 libSystem
(以及 libsystem_kernel
)链接。
该库不暴露在 SDK/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach
中暴露的 Mach 3.0 内核的 内核空间 API。
也就是说,如果您正在编写内核驻留的设备驱动程序或其他内核扩展,您必须使用其他方法。用户空间内核 API 通常与内核空间 API 不兼容,即使在它们匹配的情况下,有时也可能会出现 ABI 不兼容的情况,使用此库会导致 未定义行为。
(notes from machx developers:)
1. due to the lack of maintenance of `mach2` and `mach`, a lot of APIs are missing, so I maintain this version for my own use.
2. via bindgen as well as manual fixes.
使用方法
将以下内容添加到您的 Cargo.toml
中,以有条件地包括支持的平台上的 mach。
[target.'cfg(target_vendor="apple")'.dependencies]
# use alias for migration from exists project:
mach = { package = "mach-sys", version = "0.5" }
# or without alias:
mach-sys = "0.5"
可用的crate功能
- unstable(默认禁用):暴露新更改的API。启用此功能可能会带来破坏性更改(请参阅破坏性更改策略)。
破坏性更改策略
当最新的工具链中的一项更改或删除时,我们采取以下步骤
-
将现有的标记为 已弃用。
-
声明一个新的(默认)。
-
永久保留较旧的版本。
-
如果有两个项目具有等效的值,则将类型别名指向新的一个,或内部函数调用新的一个。
-
否则,如果两个项目具有不同的值或行为,则两者将同时存在。
-
或者,在某些情况下,如果较旧的版本确实很糟糕,那么自发布包含该版本的新的版本以来一个月或更长时间后,移除较旧的版本。
例如(等效),如果函数 FUNC
将它的 返回类型 从 u32
更改为 u64
,则将创建一个新的函数,然后旧的函数只需调用它并将它的返回类型转换为 u64 as u32
)。在大多数情况下,不会进行更多更改,两者都将永远保留。
例如(非等效),如果 const FOO
的值从 3
更改为 4
,我们将公开新的一个,即 4
。因此,用户应该注意在首次发布后的第一次更改。或者,一个月或更长时间后,可能或可能不,所有用户都应该迁移/遵循这个更改。
示例
示例可以在本存储库的 示例 目录中找到。
由于 examples/dump_process_registers.rs
使用了需要提升权限的 task_for_pid()
函数,因此必须禁用系统完整性保护(SIP)并且必须是 admin
或 _developer
组的成员才能运行该示例。然而,请注意,禁用 SIP 并不鼓励,并且仅应出于开发/调试目的进行。
- 以恢复模式重新启动 macOS。
- 点击
选项
。 - 登录到您的用户。
- 在菜单中点击
实用工具
然后点击终端
。 - 在终端中输入以下命令以禁用 SIP:
csrutil disable
(使用csrutil enable
重新启用 SIP)。 - 重新启动您的计算机。
要运行示例,请按照以下方式构建
cargo b --example dump_process_registers
然后使用 sudo
运行它
sudo ./target/debug/examples/dump_process_registers
平台支持
以下表格描述了当前的 CI 设置
目标 | 最小 Rust | XCode | 构建 | ctest | 运行 |
---|---|---|---|---|---|
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 | ✓ | - | - |
许可协议
本项目的许可协议为以下之一
- 选项 1: GNU 通用公共许可证版本 3.0,或
- 选项 2: Apache 许可证,版本 2.0
由您选择。
贡献
除非您明确声明,否则您根据 GPL-3.0
或 Apache-2.0
的双重许可协议有意提交给 mach-sys
的任何贡献,都将按照上述条款进行许可,不得附加任何其他条款或条件。
要本地测试库,请运行
$ ./tomake.sh nostd --target=x86_64-apple-darwin --any-args-accept-by-rustc
$ ./tomake.sh test --target=<your_platform> --any-args-accept-by-cargo
$ echo "for other args please see the bash script named tomake.sh"
您可以将 --target
替换为您想要测试的目标(例如 aarch64-apple-darwin
),如果您需要使用不同的 Rust 版本(例如 stable
,1.33.0
等),请使用 Rustup。
依赖关系
~0–6MB
~20K SLoC