【发布时间】:2015-02-12 17:16:18
【问题描述】:
读完this question后,我很好奇在C语言中如何做到这一点。当从另一个程序接收信息时,我们可能不得不假设内存是可写的。
我发现 this 指出可能会优化常规 memset,而 this comment 指出 memset 是错误的方法。
【问题讨论】:
-
我建议使用带有
memset()的易失性指针。这些不会被优化掉。 -
阅读了您的链接后,您怎么知道您可以删除通过操作系统(可能通过多个缓冲区)进入程序的数据?您可以确定的唯一方法是在每次关机时清理硬盘驱动器。除此之外,您可以在使用点之前加密所有敏感数据,然后将任何内存重新用于编译器不会优化的特定但无意义的任务,例如读取“lorem ipsum”文本文件并执行某些操作编译器无法推断是没有意义的。
-
@Igor S.K 这也是我想到的事情之一,但最终它导致阻止 memset 被优化。我不知道我是否对上面链接的 R.. 的评论过于重视,但感觉他的评论仍然适用。
-
@Weather Vane 你可能是对的,但我想坚持在内存中有一个数据副本并且我们有一个可写指针的情况。交换时发生的任何事情都不是我现在关心的问题。在内存中加密感觉不对,因为最终它只是混淆