图片会存储在RAM中吗?

Do pictures ever get stored in RAM?

本文关键字:RAM 中吗 存储      更新时间:2023-10-16

我是一个初学c++的程序员。

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

为什么我经常发现多个副本的字母表?是否有可能找到我检索的RAM块内的图片?我听说过文件签名(头),它在文件中的任何数据之前,但是"拖车"在所有数据之后吗?

当您从分配的内存中读取未初始化的数据时,您将永远不会看到来自其他进程的任何数据。您只能看到您自己的进程所写的数据。也就是:你的代码加上你调用的所有库。

这是内核的一个安全特性:它永远不会泄露进程的信息,除非它被特别要求传输该信息。

如果你没有在内存中加载图片,你将永远不会看到一个使用这个方法。

假设你的电脑运行的是Linux、Windows、MacOS或类似的系统,那么你的进程使用的内存中永远不会有任何图片——除非你把它们加载到你的进程中。出于安全原因,其他进程使用的内存在被分配给您的进程之前会被清除。这是所有现代操作系统的情况,多用户操作系统(Unix, VAX-VMS等)自20世纪50年代末或60年代初发明以来或多或少都是如此——因为有人发现,当"你的"数据被其他人发现时,他们只是在那里钓鱼,这有点无乐趣。

即使一个进程已经结束,它的内存也会被清除——如果你的密码仍然存储在内存中,当读取密码的程序结束时,你会怎么想?[保存高度敏感数据,如加密密钥或密码的程序,通常手动(如使用代码,但不会等到操作系统在进程结束时清除它)清除用于存储这些数据的内存,因为下面的调试功能允许随时检查内存内容,并且时间越短,敏感信息泄漏的可能性越小]

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

大多数操作系统的一种阅读另一个进程所做的调试功能(如果你在你的系统运行调试器",它当然会作为单独的进程运行,但需要能够访问您的程序调试的时候,所以需要有办法读内存的进程),但这需要更努力只是调用newmalloc(和你将需要额外的权限(超级用户、管理员等),或者也成为另一个进程的所有者)。

当然,如果您的计算机运行的是DOS或CP/M,它就没有这样的安全特性,您可以获得内存中发生的任何内容(您也可以创建一个指向任意地址的指针并读取它,只要您保持在系统的内存范围内)。