qq_33465534
qq_33465534
采纳率100%
2016-03-27 15:44 阅读 2.2k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-27 15:48

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

    点赞 2 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-27 15: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。
    
    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-27 16:17
    点赞 1 评论 复制链接分享
  • kikilizhm kikilizhm 2016-03-27 16:53

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

    点赞 1 评论 复制链接分享
  • qinjisheng_11 秦大圣 2016-04-06 11:00

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

    点赞 评论 复制链接分享

相关推荐