#child-process #hook #subprocess #shpool

app chook

chook 允许将代码注入子进程。目前,它只是一个占位符

1 个不稳定版本

0.1.0 2024年6月25日

#35 in #subprocess

Apache-2.0

6KB

shook

chook(简称 Child Hook)是一个 Rust crate,允许您注册一个 fn<ArgT: Deserialize, RetT: Serialize>) -> RetT 并通过 LD_PRELOAD 注入到子进程中。

但是为什么呢?

这允许您在子进程的地址空间中运行代码,这使您可以做一些在其他情况下无法做的事情。如果您不控制子进程的实现,即使不能直接将任何自定义代码放入子进程,这也可以让您做到这些事情。

特别是,这被 shpool 用于更新子壳的环境变量。

底层

您的钩子例程将被打包到一个带有 .so 文件和一个 _init 例程中,该例程监听几个魔法环境变量,告诉它

  1. 在哪里监听 Unix 域套接字上的传入调用
  2. 应该允许发起调用的 PID(出于安全原因,此操作受到限制)。

然后,它将创建一个 Unix 域套接字并开始监听 RPC 调用,然后它将使用这些调用调用您注册的钩子。

当您创建子进程时,您将能够在启动进程之前注册一个 chook,然后通过用于注册的相同句柄调用钩子。

无运行时依赖