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

时间:2015-06-15 18:06:24

标签: c

从随机地址读取是否安全?我知道写作是不确定的行为,但是只阅读呢?

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

2 个答案:

答案 0 :(得分:5)

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

如果你运气好并且你的程序的随机地址是within the memory bounds,那么最有可能阅读它并且你只会得到随机垃圾。

如果它在范围之外(即0x0 / NULL),你最有可能得到一个segmentation fault(虽然再次,这不能保证)会终止你的程序 - 如果你考虑的话这个“安全”然后是,否则没有。

答案 1 :(得分:3)

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

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

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