读取未分配的内存是否安全?

从随机地址读取安全吗? 我知道写作是不明确的行为但是只读书怎么样?

好吧,在许多可视化调试器中,我可以在任意地址中看到内存的内容。 这是怎么做到的?

由于行为未定义,答案是不确定的 – 或者至少是不稳定的。

如果你很幸运并且随机地址在你的程序的内存范围内,那么最有可能阅读它并且你只是得到随机垃圾。

如果它在范围之外(即0x0 / NULL),你很可能会得到一个分段错误 (虽然这不能保证)会终止你的程序 – 如果你认为这是“安全的”那么是的否则没有。

不,这不安全。 即使您不关心定义的值或准确的值,也存在内存映射IO这样的事情,因此随机地址可以与外围硬件交互。 我在受保护的内存之前做了那个,是的,它可以降低系统。

现在,根据您的系统,我希望看到您的进程空间之外的地址的段错误。 没有这种保护,一个糟糕的应用程序可以访问有价值的数据,如密码,信用卡信息等,当在一个好的应用程序中使用。

此外,您在调试器中看到的地址可能不是真实的物理地址。 相反,您可能只看到虚拟内存地址。