- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑代码:
procedure DoSmthSecret;
var
Seed: array[0..31] of Byte;
begin
// get random seed
..
// use the seed to do something secret
..
// erase the seed
FillChar(Seed, SizeOf(Seed), 0);
end;
代码的问题是:FillChar
是编译器固有的,并且编译器可能可以“优化它”。 C/C++ 编译器存在此问题,请参阅 SecureZeroMemory 。现代 Pascal 编译器(Delphi、FPC)可以进行此类优化吗?如果可以,它们是否提供等效的 SecureZeroMemory?
最佳答案
FPC 目前无法进行此类优化,而且即使使用 C++,它们也属于“不确定”类别。 (因为由于这种优化而导致的程序状态忽略了程序员告诉它的状态)
解决此类问题的关键在于定义哪些结构可以优化,哪些结构不能优化。它本身不需要 API/OS 帮助,任何具有此类功能的外部链接目标文件都可以(从此以后全局优化不会触及它)
请注意,本文没有具体命名 C++ 编译器,因此我希望它更像是一个通用实用程序函数,适用于编译器用户遇到问题时,无需太费力地阅读文档,或者当它必须轻松工作时在多个(仅限 Windows!)编译器上运行,而不会使构建系统过于复杂。
在其他情况下,选择非内联 API 函数可能不是最佳选择,特别是在较小的常量大小为零的情况下,因为它不会被内联,所以我会小心使用这个函数,并确保有一个硬的需要
这可能很重要,主要是当外部实体可以更改程序的内存(DMA、内存映射等),或者从内存镜像中删除密码和其他敏感信息时,即使根据编译器的程序永远不会读取它
关于delphi - Pascal编译器需要SecureZeroMemory函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743293/
我找到了一些示例代码,如下所示: 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 都不包含 _
我是一名优秀的程序员,十分优秀!