内存越界引用和缓存区溢出

博客介绍了内存越界引用和缓冲区溢出情况,以栈区为例,说明输入不同字节数量对栈区的影响。还阐述了对抗缓冲区溢出攻击的方法,包括栈随机化,即每次运行随机处理栈地址;栈破坏检测(金丝雀),在栈帧特定位置存随机哨兵值,运行时检查其是否改变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存越界引用和缓存区溢出

void echo()
{
    char buf[8];
    gets(buf);
    puts(buf);
}

栈区如上图所示,echo会在栈顶区域分配8字节大小给buf,当输入的字节数量0-7时,不会对栈造成破坏,当输入9-23字节时,由于是空区域,所以也不会造成破坏,但是当输入>24字节时,会修改返回地址数据,对整个栈区造成破坏。

对抗缓冲区溢出攻击

  • 栈随机化

程序每次运行,就栈的地址都采用随机化处理。

  • 栈破坏检测(金丝雀)

其思想是在栈帧中任何局部缓冲区与栈状态之间存储一个特殊的金丝雀值,也成为哨兵值,是在程序每次运行时随机产生的。在恢复寄存器状态和从函数返回之前,程序检查这个金丝雀值是否被改变,如果是,那么程序异常中止。这个金丝雀的值是在程序运行时从内存中读入存在栈中,比较的时候就将栈中的值与内存的值做XOR运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值