- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能帮我理解为什么我的代码在第一段代码中的 delete[] szPassword 上失败?我知道 szPassword 只是复制“a”,而 st2 等于 8:
TCHAR *szPassword = new TCHAR[2]();
StringCchCopy(szPassword, 2, L"ab");
SIZE_T st2 = sizeof(szPassword);
SecureZeroMemory(szPassword, st2);
delete[] szPassword;
然而,当它运行时,没有获得 sizeof() 值,它工作正常:
TCHAR *szPassword = new TCHAR[2]();
StringCchCopy(szPassword, 2, L"ab");
SecureZeroMemory(szPassword, 2);
delete[] szPassword;
最佳答案
szPassword 是一个指针,而不是数组,因此 sizeof(szPassword)
将为 4 或 8。在 64 位应用程序中,这太多了,您将尝试将 8 个字节写入4 字节缓冲区。
C++ 运行时允许分配比您要求的更多的分配,它经常这样做,以便它可以将特殊数据添加到缓冲区的末尾,以便它可以检测缓冲区溢出。
改为做这样的事情:
const UINT charcount = 2;
TCHAR *szPassword = new TCHAR[charcount];
...
SecureZeroMemory(szPassword, charcount * sizeof(TCHAR));
delete[] szPassword;
如果缓冲区总是很小,你可以只在堆栈上使用一个数组:
TCHAR szPassword[200];
...
SecureZeroMemory(szPassword, sizeof(szPassword));
关于c++ - 使用 SecureZeroMemory 新建/删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49202138/
我找到了一些示例代码,如下所示: addrinfo hints; SecureZeroMemory(&hints, sizeof(hints)); 这里有使用 SecureZeroMemory() 的
WinAPI 中有一个 SecureZeroMemory() 函数,用于在不再需要缓冲区时删除用于存储密码/加密 key /类似内容的内存。它与 ZeroMemory() 的不同之处在于它的调用不会被
谁能帮我理解为什么我的代码在第一段代码中的 delete[] szPassword 上失败?我知道 szPassword 只是复制“a”,而 st2 等于 8: TCHAR *szPassword =
我知道有一个 SecureZeroMemory C中的函数函数实现在 中定义作为RtlSecureZeroMemory功能。 QNS:如何SecureZeroMemory在Delphi中使用? De
Mac OS X 是否有等同于 RtlSecureZeroMemory 的版本?/SecureZeroMemory ,一个将内存块清零的函数,但调用不会被编译器优化掉? 最佳答案 编写自己的函数: v
This MSND article说 SecureZeroMemory() 适用于在内存中存储了一段时间的敏感数据应该确保在不再需要时尽快覆盖的情况。 this SO question的答案解释为什么
我们编写了可在 Windows 和 Ubuntu 上编译的 C++ 代码。我想使用安全函数 memset_s 将我的应用程序中的缓冲区清零。 Windows 和 Ubuntu 16.04 都不包含 _
我是一名优秀的程序员,十分优秀!