什么时候应该使用SecureZeroMemory()?

aCu*_*ria 3 c++

我找到了一些示例代码:

addrinfo hints;
SecureZeroMemory(&hints, sizeof(hints));
Run Code Online (Sandbox Code Playgroud)

有没有理由在这里使用SecureZeroMemory()?为什么不呢

addrinfo hints = {0};
Run Code Online (Sandbox Code Playgroud)

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

The*_*kis 8

如果(例如)变量在本范围内不再使用(或者在编译器证明它不会改变程序的内部一致性的任何其他情况下),编译器可以优化掉零声明.对于安全关键型内存,当涉及到检查您内存的外部进程时,这可能会危及应用程序的安全性.SecureZeroMemory这是为了使它不被优化掉.

我无法确定为什么这个特定的代码片段会选择该函数而不是其他归零内存范围的方法.这可能是代码作者或误入歧途的公司政策对其目的的误解.


Rem*_*anu 6

来自MSDN:

使用此函数而不是ZeroMemory在您希望确保及时覆盖数据时,因为某些C++编译器可以ZeroMemory通过完全删除它来优化调用.

另外,一个简单的分配,没有屏障,可以由硬件缓存,而不是长时间进入RAM.或者可以优化局部变量.SecureZeroMemory确保不会发生这种情况.

至于为什么用于初始化addrinfo,明显不与安全相关的问题,打败了我.