自己给自己写了一个有趣的BUG,数组越界越到程序自身的安全空间

8 篇文章 0 订阅

在这里插入图片描述
当初为了把0x0-0xFF打乱,因为char和unsigned char保存到内存的值都是一样的,都是十六进制(也就是-1的char和255的unsigned char做一个字节的比较时是相等的,因为十六进制都是0xFF),只是表示出来不一样而已,所以就没用unsigned char。结果就出现了上面BUG,当value=-23~-21时才会这样,count的值大于了256,跳出了循环。

原因:

打三个地址出来一看,count的地址(0x4ffc28 )- flag(0x4ffc40)等于十进制的-24,所以flag(0x4ffc40)地址开始,-23到-20是count的内存空间,且下标索引是有符号的,而-20的内存空间刚好的count的低8位,赋值为1是<256的,所以-20并不会发生跳出循环的问题。但如果是-21赋值为1,那就相当于count |= 0x100了。所以为了避问造成这样的问题,下标索引时最好都用无符号类型的,除非能100%确定没有负数。

注:windows是小端,也就是地址越大,位数越低,所以0x4ffc2b是count的低8位

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值