代码之家  ›  专栏  ›  技术社区  ›  HectorMac

记忆入侵

  •  1
  • HectorMac  · 技术社区  · 6 年前

    一段时间前,我听说内存入侵,当软件A的某个部分进入同一软件A的另一个部分,从而阻止程序正常工作。

    记忆入侵真的存在吗?我的意思是,我一直在使用C++,我知道数组可以无限地增长,但是它们能增长吗? 结束 其他结构?如果数组不生成mi,会发生什么?

    5 回复  |  直到 14 年前
        1
  •  5
  •   sk.    16 年前

    你在描述一个 buffer overflow 是的,它们是软件中安全问题的主要来源。如果有人可以用任意数据重写程序代码,而该任意数据包含攻击者选择的可执行代码,那么他们基本上可以使用发生溢出的程序的特权级别执行机器代码。

    当一个固定的存储量被分配给一个未知的输入量(从键盘、网络、API调用等)时,通常会发生这个问题,并且输入量大于存储量。在不在数组访问上执行边界检查的编程语言中,这可能导致代码的可执行区域被覆盖。像这样的技术 DEP 可以通过写保护内存的可执行区域来降低此风险。

        2
  •  2
  •   mike    16 年前

    堆栈溢出也可能导致此问题。

        3
  •  0
  •   Uri    16 年前

    在非自动内存管理的语言中,这种情况并不少见。例如,A buffer overflow 是入侵的一个很好的例子。

    有一些针对特定类型入侵的保护措施(例如,您通常会得到堆栈溢出,而不是遍历其他材料),但涉及到任何时间指针时,都很容易遍历您不希望访问的内存或代码。

    像Java和C语言这样的语言不会让你在低水平上操控内存,所以风险就减轻了。

        4
  •  0
  •   S.Lott    16 年前

    “内存入侵”称为缓冲区或堆栈溢出。这可能是最重要的漏洞,您可以利用它来发现安全缺陷。

    标准的C库中充满了一些函数,它们轻松地假设输入不会溢出分配的缓冲区空间。当输入 比缓冲区大的是,缓冲区溢出到内存的其他部分。程序不再正常工作,可能会以微妙的方式损坏。

    阅读此: http://www.owasp.org/index.php/A5_2004_Buffer_Overflow

        5
  •  0
  •   Zifre    16 年前

    在C++中,数组不能无限期地增长。你没有无限的记忆。内存入侵可能是由以下原因引起的:

    int foo[100];
    foo[100]=5; // writing outside the array. This might cause some problems.