我对这件事有点困惑。我知道,每一个用不使用自动垃圾回收的语言编写的程序,都必须在退出之前释放其所有资源,否则就会出现内存泄漏。
我的问题是,这些内存泄漏如何导致信息泄漏,如泄漏密码等?
我的理解是,在程序退出后,它所使用的内存可以被另一个程序重用或检查。因此,如果该内存区域未被清除,它将包含一些重要信息,如密码。
发布于 2018-05-13 18:26:38
这个问题与内存泄漏和垃圾收集无关。
当内存不再需要时,它的内容没有被删除,它只是被标记为空闲。这样,如果您的应用程序在内存中有一个密码,它可以留在那里,即使程序退出。
为了防止这样的信息泄漏,您必须在内存中覆盖存储了一些关键信息的位置。
发布于 2018-05-13 18:22:16
确实,程序使用的内存在终止/退出后仍可能包含有趣的信息。
但是,对于不包含任何内存泄漏的程序也是如此。正确释放分配的内存并不能清除它。
但是,很可能任何程序如果没有正确地释放分配的内存,也可能无法安全地删除被遗忘/泄漏的内存中的信息。
请注意,在这种情况下,“泄漏”指的是在程序结束前没有释放的内存,而忽略了这样一个事实,即这样的内存将被几乎每一个现代操作系统恢复。内存可供其他程序使用,特别是稍后启动的程序。
确实删除显式或隐式释放内存的操作系统是可能的,但在与安全相关的专用用例之外是不可能的。
上面的“显式删除”指的是程序本身在释放之前编写无关的信息。对于“隐式删除”,我的意思是释放它就足够了,删除是在free()期间发生的。
我使用C作为示例语言,标签在那里,但已被删除(并非不合理)。
Garabge集合(用暗示它的语言)不会改变这方面的任何事情。垃圾回收(当从正确释放内存的职责中释放出来时)可以隐式地覆盖新的可重新使用的内存,但不能保证它;与语言中的释放机制完全相同,而不进行车库收集。
https://stackoverflow.com/questions/50319177
复制相似问题