加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:52:06 所属栏目:大数据 来源:网络整理
导读:考虑一下代码: 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是一个编译器内在函数,可能编
考虑一下代码:

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-only!)编译器,不会过度复杂的构建系统.

在其他情况下选择非可嵌入的API函数可能不是最优的,特别是小的,恒定的大小为零,因为它不会内联,所以我会小心这个函数,并确保有一个困难的需要

主要是当外部实体可以更改程序的内存(DMA,内存映射等)或从内存映像中删除密码和其他敏感信息时,这可能很重要,即使根据编译器的程序永远不会读取它

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读