今天老师讲了一个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.