11 个版本

新版本 0.5.5 2024 年 8 月 9 日
0.5.3 2024 年 2 月 8 日
0.5.2 2023 年 12 月 29 日
0.5.1 2023 年 3 月 6 日
0.3.0 2022 年 11 月 12 日

134macOS 和 iOS API 中排名

Download history 1/week @ 2024-06-03 32/week @ 2024-07-22 155/week @ 2024-08-05

每月下载 187
用于 getargv

BSD-3-Clause

92KB
334

getargv

Rust CI

libgetargv 是一个库,允许您获取 macOS 上其他正在运行进程传递的参数。它旨在提供与在 Linux 上从 /proc/<pid>/cmdline 读取大致相同的函数。在 macOS 上,这是通过解析 KERN_PROCARGS2 sysctl 的输出来完成的,这在观察中 经常 实现不正确,因为忽略了传递给目标进程的空参数的起始可能性。这个 crate 是 libgetargv 库的 Rust 绑定。

权限

libgetargv 默认只能看到与同一用户运行的进程,所以请确保您的进程以期望的用户(setuidlaunchd.plistsudo)运行或可以 提升权限;请注意,安全地提升权限 非常复杂,并且将是 macOS 上提升权限攻击的目标,所以如果您选择这条路,请格外小心,最好让用户在需要时为您提升权限。

系统要求

需要 macOS,因为这是一个针对 macOS 的特定 sysctl,即使是 BSD 也没有实现它。您的系统必须支持 sysctlKERN_PROCARGS2,这通常意味着 macOS 10.3 或更高版本,尽管我没有测试过低于 10.7 的版本。您还需要一个非古老版本的 clang(需要 c99),否则您必须使用 CCEXTRA_CPPFLAGSEXTRA_CFLAGS 来覆盖编译器标志。

构建 getargv-sys

为了构建 getargv-sys

  • libgetargv 安装到您的系统上(见下文)。
  • 克隆此存储库并运行 cargo build
  • getargv-sys = "0.5.1" 添加到您的 Cargo.toml 文件依赖项中。

安装 libgetargv

要获取访问 libgetargv 的权限,请注册适当的 赞助等级

克隆 libgetargv 存储库:git clone https://github.com/getargv/getargv.git

运行 make install_dylib,默认将库安装到 /usr/local/ 前缀;您可以使用 PREFIX make 变量更改安装位置:make PREFIX=/opt install_dylib

我正在构建二进制工件以使用 pkg 安装程序进行安装,而无需编译,但是即使这样,根据您的系统,可能仍然需要从源代码编译;例如,如果您使用自定义 PID_MAX 值构建了自己的 xnu 内核。

构建 libgetargv

我已在 macOS 10.7-13 上构建了 libgetargv,仅使用 CLT 软件包,而不是完整的 Xcode 安装。如果您需要覆盖变量,请在 make 命令内部执行,例如:make EXTRA_CPPFLAGS=-DMACRO EXTRA_CFLAGS=-std=c17 dylib。如果您正在尝试在 10.7 之前的 macOS 版本上构建,请告诉我结果。

依赖项

~0–2MB
~38K SLoC