关于一个数据类型的溢出问题
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.
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.
相关文章推荐
- 一个关于数据类型的问题
- 关于数据类型的一个小问题 (int) (int &) (int ) &
- 关于MySQL的TinyInt数据类型在Delphi中作为Boolean类型的一个要注意的问题
- 关于基本数据类型转换的一个小问题
- 关于EXP-00056: 遇到 ORACLE 错误 1455 ORA-01455: 转换列溢出整数数据类型 EXP-00000: 导出终止失败 的问题解决方法整理
- 一个关于Java数据类型的有趣问题
- 关于C#数据类型之间转换的问题!
- 从Excel中读取数据,关于一列数据包含多种数据类型的问题
- ms sql到mysql的移植:关于数据类型移植的一些问题
- 关于Silverlight对匿名类型数据绑定的问题及其解决方法
- 在学习.net中的小问题,关于oledb 的日期数据类型
- 关于C#数据类型之间转换的问题
- 今天在csdn上遇到一个问题,是关于sql数据行列转换的,我的写法如下:
- 一个C程序的数据类型对齐问题
- Delphi - 盒子上面看见的一个问题:关于类型转换Type Cast
- 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
- 关于对日期类型的数据进行模糊查询的问题
- 一个关于指针+记录数据类型的使用技巧
- 关于XML数据存储时遇到的字符编码的一个怪问题
- 关于数据绑定的一个小小的总结:绑定数据到List类型的控件(RadioButtonList,ListBox等),双重绑定。