6个版本 (1个稳定版)

1.0.0 2019年11月23日
0.1.4 2019年3月9日
0.1.1 2019年1月21日

#352 in 内存管理


用于 cryptobox

BSD-2-Clause OR MIT

17KB
186

BSD-2-Clause License MIT License docs.rs crates.io Download numbers dependency status Travis CI Appveyor CI

MAProper

此crate提供了安全覆盖内存分配器 MAProper 🧹

什么是 MAProper

MAProperstd::alloc::System 的扩展,确保在分配内存释放前,使用 memset_s/SecureZeroMemory/explicit_bzero/explicit_memset 中的一种来擦除分配的内存。

什么是 MAProper 的作用

MAProper 在处理大量敏感数据时非常有用:因为动态分配类型如 VecString 的内存管理是透明的,你实际上没有真正可靠地跟踪和擦除它们的敏感内容的机会。

然而,它们都使用全局分配器——所以所有路径都通向罗马(在这个例子中是全局分配器的 allocdealloc 函数)——而 MAProper 就坐在这里等待处理废弃的内存。

使用 MAProper 作为全局分配器(示例)

#[global_allocator]
static MA_PROPER: ma_proper::MAProper = ma_proper::MAProper;

fn main() {
	// This `Vec` will allocate memory through `MA_PROPER` above
	let mut v = Vec::new();
	v.push(1);
}

重要

请注意,MAProper 只擦除正确释放的内存。这特别意味着

  • 栈项不会被此分配器 擦除 - 要擦除栈内存,我们公开了 MAProper::erase_sliceMAProper::erase_ptr<T>,以便您可以在需要时手动擦除它们
  • 根据您的panic-policy和您的 Rc/Arc 使用(保留周期),析构函数(以及因此分配器)可能永远不会被调用

无运行时依赖

~180KB