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

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

c

5个回答

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

qq_33465534
qq_33465534 明白了,原来隐患这么恐怖!
4 年多之前 回复
 #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 谢谢,我明白了
4 年多之前 回复
qq_33465534
qq_33465534 谢谢,我明白了
4 年多之前 回复

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐