我想创建 C 链接函数来拦截我的程序调用,LD_PRELOAD
但我正在 Rust 中实现拦截函数。
我创建拦截调用没有问题,pub extern fn
但我想在某处从程序的全局状态读取/写入,因为我无法更改我正在拦截的函数的签名以接受元数据。我不一定需要堆分配,我可以使用一些大型静态初始化池HashSet
或Vec
条目。但我确实需要能够在程序运行期间添加和删除集合的元素。
我认识到这种模式与许多 Rust 设计目标背道而驰,但对我来说它似乎是一个合理的用例。
我是 Rust 的新手,所以我希望有一个unsafe
选项可以做到这一点。
如果查看代码示例有用:
static mut foo Vec<c_int> = Vec::new();
...失败,因为您不能拥有static
需要析构函数或进行堆分配的存储。并且lazy_static!
不允许有mut
能力的结构。
理想情况下,我更喜欢HashSet<c_int>
. 如果我不能让它工作,我想我可以尝试一个Vec::from_elem(100, 0)
. 这并不理想,因为我需要指定某种哨兵值,但如果它有效,我想我会很满意。