【问题标题】:Is free/=NULL enough to clear memory, or should SecureZeroMemory be placed immediately before it? [duplicate]free/=NULL 是否足以清除内存,还是应该将 SecureZeroMemory 放在它之前? [复制]
【发布时间】:2018-03-11 19:02:01
【问题描述】:

清除分配的内存的最佳方法是什么?

  1. 是否免费/=NULL 所有需要的东西
  2. 在执行 free/=NULL 之前 SecureZeroMemory 是否会增加代码的安全性?
  3. 或者,添加 SecureZeroMemory 是否过大?

这是我的代码:

        DWORD tLen = 128;
        BYTE *pbData = (BYTE *)malloc(tLen);
        memcpy(pbData, chBuffer, tLen);

        // ...work done here...

        // Clear it
        SecureZeroMemory(pbData, tLen);
        free(pbData);pbData=NULL;

谢谢!

编辑:这个问题与某些人所说的问题不是重复。它不是要求何时使用 SecureZeroMemory,而是要求与 free/=NULL 一起使用时的最佳实践。

【问题讨论】:

  • 只有在处理内存中的敏感信息时,我才会使用SecureZeroMemory,在这种情况下...
  • 这个question 可能对你有帮助
  • 谢谢,但是这个问题并没有检查 free() 函数 SecureZeroMemory() 一起 - 这个问题只关注 SecureZeroMemory,这与我的不同我问。
  • 什么是“free/=NULL”?你是什​​么意思?您在此处标记了其中一个 cmets,表明这不是重复的,但对我来说显然是重复的。 Free 不会以任何方式清除内存,并且将指针设置为 null 绝对没有任何作用。如果要清除内存,则需要调用 SecureZeroMemory(),这正是建议重复的答案所说的。
  • "free/=NULL' 是 "free(x);x=NULL;" 的简写,谢谢,您的回复刚刚回答了我最初的问题,并确认另一篇文章只是简单地解释了 SecureZeroMemory(),即不是我要问的。

标签: c free securezeromemory


【解决方案1】:

这取决于你的程序在做什么。如果其他人可以查看已释放内存的缓冲区,您会担心吗?如果内存包含银行帐户详细信息,我会说它是。如果它包含视频游戏的设置,则可能不包含(取决于您的用户作弊的决心)。

一般来说,在释放内存之前它不会对内存造成任何伤害。

【讨论】:

  • "在释放内存之前,它通常不会对内存造成任何伤害。"除了浪费时间。如果每个免费都值得做零,那么标准库会为你做。在 99% 的情况下,这是不必要的。
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2012-06-19
相关资源
最近更新 更多