比如我定义了一个长度为10的数组a,那么我可以利用指针的方法来,访问a[12],显然不合法,但依然不影响数据的存取?那么为什么会提出数组长度这个概念?
看a[12]指向什么地方,可能是另一个变量,甚至可能是堆栈返回地址,如果前者,程序运行出错,不合预期,后者,甚至程序会执行莫名其妙的代码。
所谓缓冲区溢出攻击,就是利用的这一原理,用垃圾数据覆盖掉函数的返回地址,然后跳转到另一个地方,那个地方包含恶意的代码,对计算机造成破坏。
#include <stdio.h>
int main()
{
int y = 1;
int x[10];
x[10]=3;
printf("%d\n", y);
return 0;
}
这代码结果是3
说明x[10]越界以后冲掉了y。
http://www.cnblogs.com/fanzhidongyzby/archive/2013/08/10/3250405.html
这是缓冲区溢出
内存溢出了,有可能把其他数据给踩了,
缓冲区溢出问题,比如说去运行别的代码去了,比如在linux中获得root权限,那就问题大了