gpt4 book ai didi

delphi - Pascal编译器需要SecureZeroMemory函数吗?

转载 作者:行者123 更新时间:2023-12-03 15:01:15 24 4
gpt4 key购买 nike

考虑代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com