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

delphi – Do Pascal编译器需要SecureZeroMemory函数吗?,第1张

概述考虑一下代码: 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; 代 考虑一下代码:

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,内存映射等)或从内存映像中删除密码和其他敏感信息时,这可能很重要,即使根据编译器的程序永远不会读取它

总结

以上是内存溢出为你收集整理的delphi – Do Pascal编译器需要SecureZeroMemory函数吗?全部内容,希望文章能够帮你解决delphi – Do Pascal编译器需要SecureZeroMemory函数吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1273467.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存