前段时间我听说内存入侵,当软件 A 的某些部分进入同一软件 A 的另一部分时,导致程序无法正常工作。
内存入侵真的存在吗?我的意思是,我一直在使用 C++,而且我知道数组可以无限增长,但是它们可以在其他结构上增长吗?如果数组不会生成 MI,那会是什么?
前段时间我听说内存入侵,当软件 A 的某些部分进入同一软件 A 的另一部分时,导致程序无法正常工作。
内存入侵真的存在吗?我的意思是,我一直在使用 C++,而且我知道数组可以无限增长,但是它们可以在其他结构上增长吗?如果数组不会生成 MI,那会是什么?
堆栈溢出也可能导致此问题。
在不自动进行内存管理的语言中,这种情况并不少见。例如,缓冲区溢出就是入侵的一个很好的例子。
有一些针对特定类型入侵的保护措施(例如,您经常会遇到堆栈溢出而不是查看其他材料),但是任何时候涉及指针,都很容易查看您不期望的内存或代码使用权。
Java 和 C# 等语言不允许您在低级别操作内存,因此可以降低风险。
“内存入侵”称为缓冲区或堆栈溢出。它可能是您可以利用来查找安全漏洞的最重要的漏洞。
标准 C 库中充满了愉快地假设输入不会溢出分配的缓冲区空间的函数。当输入大于缓冲区时,缓冲区溢出到内存的其他部分。该程序不再正常工作,并且可能以微妙的方式损坏。
在 C++ 中,数组不能无限增长。你没有无限的记忆。内存入侵将由以下原因引起:
int foo[100];
foo[100]=5; // writing outside the array. This might cause some problems.