图片会存储在 RAM 中吗?

Do pictures ever get stored in RAM?

我是初学者 C++ 程序员。

我编写了一个简单的程序来创建一个字符数组(大小由用户选择)并读取其中的先前信息。通常你可以找到一些有意义的东西,但其中大部分只是奇怪的字符。我把它输出成一个二进制文件。

为什么我经常找到多个字母表? 是否可以在我检索到的 RAM 块中找到图片? 我听说过文件签名 (headers),它在文件中的任何数据之前,但是 "trailers" 在所有数据之后在后面吗?

当您从分配的内存中读取未初始化的数据时,您将永远不会看到来自另一个进程的任何数据。您只会看到 您自己的进程 写入的数据。即:您的代码加上您调用的所有库。

这是内核的一项安全功能:它永远不会从进程中泄露信息,除非特别要求它传输该信息。

如果您没有在内存中加载图片,您将永远不会看到使用此方法的图片。

假设您的计算机 运行s Linux、Windows、MacOS 或类似的东西,您的进程使用的内存中永远不会有任何图片 -除非你将它们加载到你的过程中。出于安全原因,其他进程使用的内存在分配给您的进程之前会被清除。这是所有现代 OS 的情况,多用户 OS(Unix、VAX-VMS 等)或多或少自从它们首次发明以来就是这种情况1950 年代末或 1960 年代初 - 因为有人发现当 "your" 数据被刚好在那里钓鱼的其他人发现时,这有点不有趣。

即使是已结束的进程也会清除其内存 - 如果您的密码仍存储在内存中以供其他人在读取密码的程序结束时找到它,您会喜欢吗? [保存高度敏感数据的程序,如加密密钥或密码,通常手动(如使用代码,但不等到 OS 在进程结束时清除它)清除用于存储此类数据的内存,因为下面的调试功能允许随时检查内存内容,时间越短,敏感信息泄露的可能性越小]

一旦内存分配给您的进程并再次释放,它将包含该内存中发生的所有内容,因为清除它需要额外的时间,而且大多数时候,您希望用无论如何。所以它包含它碰巧包含的任何东西,如果你在它周围戳一下,你可能会 "find stuff"。但这都是你自己的过程。

大多数 OS 都有办法读取另一个进程正在做的事情作为调试功能的一部分(如果您 运行 在您的系统中 "debugger",它将当然 运行 作为一个单独的进程,但需要在调试时能够访问您的程序,因此需要有读取该进程内存的方法),但这比仅调用需要更多的努力newmalloc(您要么需要额外的权限(超级用户、管理员等),要么也是其他进程的所有者)。

当然,如果您的计算机是 运行ning DOS 或 CP/M,它没有这样的安全功能,您可以得到内存中的任何内容(并且你也可以构造一个指向任意地址的指针并读取它,只要你在系统的内存范围内)。