2 qq 33465534 qq_33465534 于 2016.03.27 23:44 提问

c语言非法占用内存会有什么隐患?

比如我定义了一个长度为10的数组a,那么我可以利用指针的方法来,访问a[12],显然不合法,但依然不影响数据的存取?那么为什么会提出数组长度这个概念?

6个回答

caozhy
caozhy   Ds   Rxr 2016.03.27 23:48
已采纳

看a[12]指向什么地方,可能是另一个变量,甚至可能是堆栈返回地址,如果前者,程序运行出错,不合预期,后者,甚至程序会执行莫名其妙的代码。
所谓缓冲区溢出攻击,就是利用的这一原理,用垃圾数据覆盖掉函数的返回地址,然后跳转到另一个地方,那个地方包含恶意的代码,对计算机造成破坏。

qq_33465534
qq_33465534 明白了,原来隐患这么恐怖!
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.27 23:51
 #include <stdio.h>

int main()
{
    int y = 1;
    int x[10];
    x[10]=3;
    printf("%d\n", y);
    return 0;
}

这代码结果是3
说明x[10]越界以后冲掉了y。
qq_33465534
qq_33465534 谢谢,我明白了
一年多之前 回复
qq_33465534
qq_33465534 谢谢,我明白了
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.28 00:17
kikilizhm
kikilizhm   2016.03.28 00:53

内存溢出了,有可能把其他数据给踩了,

huoneng
huoneng   2016.03.30 17:29

太难了,需要慢慢消化

qinjisheng_11
qinjisheng_11   2016.04.06 19:00

缓冲区溢出问题,比如说去运行别的代码去了,比如在linux中获得root权限,那就问题大了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!