vc++ 里面的漏洞
先看下面几行代码:
一:
int main(int argc, char* argv[])
{
int i = -1;
unsigned int j = 1;
if(i>j)
printf("huche");
getchar();
return 0;
}
输出结果为:huche
二:


- 2楼Wentasy昨天 21:37
- 这两个都不是漏洞。n第一个:无符号与有符号数进行运算时,系统会自动将有符号数看成无符号数,然后进行比较。假定一个数是占8位,也就是1个字节。-1=11111111(补码),相当于无符号数255,n1=00000001,无符号数表示1,当然255比1大,所以返回true。所以输出“huche”;n第二个:在上图中只是表示中间值,并不影响最后的结果。nn建议:以后遇到什么问题,不要就说是什么什么的漏洞,想想为什么。
- Re: U201017971昨天 23:24
- 回复Wentasyn第一个问题当然明白,只是想说明尽可能要避免强制转换。第二个问题并非你想的那么简单,在机房(版本低一些)测试的时候是输出修改后的数据的,问了一下老师,因为在main当中是在栈上调用,在程序运行当中是有机会修改的,这也就是平时所说的内存管理的问题,之后自己用自己的测试把定义放在外面根本编译不过去了。
- Re: U201017971昨天 23:26
- 回复U201017971n这充分说明了在堆上调用需要释放掉的原因。
- 1楼renyongwang1988昨天 19:26
- 一楼的分析,受教了