图片会存储在RAM中吗?
Do pictures ever get stored in RAM?
我是一个初学c++的程序员。
我写了一个简单的程序,它创建一个字符数组(大小由用户选择)并读取其中先前的信息。通常你可以找到一些有意义的东西,但大多数只是奇怪的字符。我把它输出成一个二进制文件。
为什么我经常发现多个副本的字母表?是否有可能找到我检索的RAM块内的图片?我听说过文件签名(头),它在文件中的任何数据之前,但是"拖车"在所有数据之后吗?
当您从分配的内存中读取未初始化的数据时,您将永远不会看到来自其他进程的任何数据。您只能看到您自己的进程所写的数据。也就是:你的代码加上你调用的所有库。
这是内核的一个安全特性:它永远不会泄露进程的信息,除非它被特别要求传输该信息。
如果你没有在内存中加载图片,你将永远不会看到一个使用这个方法。
假设你的电脑运行的是Linux、Windows、MacOS或类似的系统,那么你的进程使用的内存中永远不会有任何图片——除非你把它们加载到你的进程中。出于安全原因,其他进程使用的内存在被分配给您的进程之前会被清除。这是所有现代操作系统的情况,多用户操作系统(Unix, VAX-VMS等)自20世纪50年代末或60年代初发明以来或多或少都是如此——因为有人发现,当"你的"数据被其他人发现时,他们只是在那里钓鱼,这有点无乐趣。
即使一个进程已经结束,它的内存也会被清除——如果你的密码仍然存储在内存中,当读取密码的程序结束时,你会怎么想?[保存高度敏感数据,如加密密钥或密码的程序,通常手动(如使用代码,但不会等到操作系统在进程结束时清除它)清除用于存储这些数据的内存,因为下面的调试功能允许随时检查内存内容,并且时间越短,敏感信息泄漏的可能性越小]
一旦内存被分配给进程并再次释放,它将包含该内存中的任何内容,因为清除它需要额外的时间,而且大多数时候,您无论如何都想用其他东西填充它。所以它包含了它碰巧包含的东西,如果你在它周围戳一戳,你可能会"发现东西"。但这都是你自己的过程。
大多数操作系统的一种阅读另一个进程所做的调试功能(如果你在你的系统运行调试器",它当然会作为单独的进程运行,但需要能够访问您的程序调试的时候,所以需要有办法读内存的进程),但这需要更努力只是调用new
或malloc
(和你将需要额外的权限(超级用户、管理员等),或者也成为另一个进程的所有者)。
当然,如果您的计算机运行的是DOS或CP/M,它就没有这样的安全特性,您可以获得内存中发生的任何内容(您也可以创建一个指向任意地址的指针并读取它,只要您保持在系统的内存范围内)。
- 类型总是使用其大小存储在内存中吗
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 不必要的C++代码最终会出现在我完成的程序中吗?
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 打印没有铸件的枚举可以在C++中吗?
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- 为什么我的 2d 数组的第二行从 RAM 中获取随机值?
- "x"的所有元素都存在于"y"(排序向量)中吗?
- 如果我从不调用这个方法,我可以把static_assert放在类方法中吗
- 你能把整个网页嵌入到c++源代码中吗
- 我可以使用istream_iterator将<char>一些 istream 内容复制到 std::string 中吗?
- 可以将模板化的 lambda 存储到 std::function 中吗?
- typedef 应该同时在类定义和类声明中吗?
- 我们可以动态地将操作插入到我们的函数中吗?
- 我可以将函数的输出参数存储到unique_ptr中吗?
- 可以将逗号和参数传递到C++宏中吗?
- 我可以停止 GCC 将标准库名称包含在全局命名空间中吗?
- 如果我不将预先编写的字符串保存到变量,它还在内存中吗?
- 图片会存储在RAM中吗?