什么时候应该使用 SecureZeroMemory()

When should SecureZeroMemory() be used?

本文关键字:SecureZeroMemory 什么时候      更新时间:2023-10-16

我找到了一些示例代码,如下所示:

addrinfo hints;
SecureZeroMemory(&hints, sizeof(hints));

有理由在这里使用SecureZeroMemory()吗?为什么不只是

addrinfo hints = {0};

示例代码:http://msdn.microsoft.com/en-us/library/windows/desktop/ms742203(v=vs.85).aspx

如果(例如)在当前范围内不再使用该变量(或在编译器证明它不会改变程序内部一致性的任何其他情况下),编译器可以优化清零语句。对于安全关键型内存,当涉及到检查内存的外部进程时,这可能会危及应用程序的安全性。 编写SecureZeroMemory时不会对其进行优化。

我无法确定为什么这个特定的代码片段选择该函数而不是其他将内存范围归零的方法。这可能是代码作者对其目的的误解,也可能是公司政策被误导。

来自 MSDN:

当您

想要确保数据将被及时覆盖时,请使用此函数而不是ZeroMemory,因为某些C++编译器可以通过完全删除ZeroMemory来优化对的调用。

此外,没有屏障的简单分配可能会被硬件缓存,并且长时间不会进入 RAM。或者局部变量可能会被优化掉。SecureZeroMemory确保这些都不会发生。

至于为什么用于初始化addrinfo,一个明显与安全无关的问题,打败了我。

相关文章:
  • 没有找到相关文章