读书人

vc++ 里边的漏洞

发布时间: 2012-07-15 20:20:06 作者: rapoo

vc++ 里面的漏洞

先看下面几行代码:

一:

int main(int argc, char* argv[])
{
int i = -1;
unsigned int j = 1;

if(i>j)
printf("huche");
getchar();
return 0;
}

输出结果为:huche

二:

vc++ 里边的漏洞

vc++ 里边的漏洞

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
一楼的分析,受教了

读书人网 >C++

热点推荐