首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vc++ 里边的漏洞

2012-07-15 
vc++ 里面的漏洞先看下面几行代码:一:int main(int argc, char* argv[]){ int i -1 unsigned int j 1

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

热点排行