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

xiv*_*r77 4 c

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

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

Ric*_*ner 5

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

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

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

  • 无法保证(在C语言中)访问无效地址会导致分段错误. (2认同)

don*_*edo 5

不,这不安全。即使您不关心定义的值或准确度,也有内存映射 IO 之类的东西,因此随机地址可以与外围硬件交互。我在受保护内存之前就这样做了,是的,它会导致系统崩溃。

如今,根据您的系统,我希望看到进程空间之外地址的段错误。如果没有这种保护,在好的应用程序中使用时,坏的应用程序可能会访问有价值的数据,例如密码、信用卡信息等。

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