您的位置:首页 > 其它

关于一个数据类型的溢出问题

2016-10-15 19:03 483 查看
  今天老师讲了一个bug,大部分计算机的漏洞都是一个数据超过了这个数据类型表示的界限。导致出现漏洞。比如:

  char a=-128;

  那么a的二进制表示为a=0x1000 0000

  char b=-a;

  我们设想的结果为b=128;

  由于字符型变量只有8个字节,那么8个字节的有符号数表示范围为-128~127。

  那么-128取相反数,得到的不是128.

  根据汇编指令

  movb $-128,-2(%rbp)

  movzbl  -2(%rbp),%eax;

  negl %eax;  //  128=1000 000     那么negl %eax就等于0111 1111再加1,得到的还是1000 0000.

  所以在char类型中,-128取反还是-128.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 溢出