0

我想创建 C 链接函数来拦截我的程序调用,LD_PRELOAD但我正在 Rust 中实现拦截函数。

我创建拦截调用没有问题,pub extern fn但我想在某处从程序的全局状态读取/写入,因为我无法更改我正在拦截的函数的签名以接受元数据。我不一定需要堆分配,我可以使用一些大型静态初始化池HashSetVec条目。但我确实需要能够在程序运行期间添加和删除集合的元素。

我认识到这种模式与许多 Rust 设计目标背道而驰,但对我来说它似乎是一个合理的用例。

我是 Rust 的新手,所以我希望有一个unsafe选项可以做到这一点。

如果查看代码示例有用:

static mut foo Vec<c_int> = Vec::new();

...失败,因为您不能拥有static需要析构函数或进行堆分配的存储。并且lazy_static!不允许有mut能力的结构。

理想情况下,我更喜欢HashSet<c_int>. 如果我不能让它工作,我想我可以尝试一个Vec::from_elem(100, 0). 这并不理想,因为我需要指定某种哨兵值,但如果它有效,我想我会很满意。

4

0 回答 0