不久前,我听说了内存入侵,当软件A的某些部分进入同一软件A的另一部分时,程序就无法正常工作。
记忆入侵真的存在吗?我的意思是,我一直在使用C++,我知道数组可以不确定地增长,但是它们能在其他结构上生长吗?如果数组不会生成MI,又会发生什么呢?
发布于 2009-04-22 17:31:13
您正在描述一个缓冲区溢出,是的,它们是软件中安全问题的一个很大来源。如果有人可以用任意数据覆盖程序代码,并且该任意数据包含攻击者选择的可执行代码,那么他们基本上可以使用发生溢出的程序的特权级别执行机器代码。
当为未知数量的输入(来自键盘、网络、API调用等)分配固定数量的存储时,通常会发生此问题,而且输入的数量最终大于存储的大小。在不对数组访问执行边界检查的编程语言中,这可能导致代码的可执行区域被覆盖。像环境保护局这样的技术可以通过写保护内存中的可执行区域来降低这种风险。
发布于 2009-04-22 17:35:07
堆栈溢出也会导致此问题。
发布于 2009-04-22 17:33:02
在没有自动管理内存的语言中,这种情况并不少见。例如,缓冲区溢出是入侵的一个很好的例子。
有一些针对特定类型入侵的保护措施(例如,您通常会得到堆栈溢出,而不是检查其他材料),但是只要涉及到指针,就很容易检查您不希望访问的内存或代码。
像Java和C#这样的语言不允许您在较低的级别上操作内存,因此降低了风险。
https://stackoverflow.com/questions/778334
复制相似问题