再探VS2010缓冲区溢出检查
(还是转自我的人人,不过人人因为无聊,已经注销)
有好友凌晨5点QQ问我一个问题:如果函数中有两个缓冲区,然后其中一个被写入的时候覆盖了下一个缓冲区部分数据,这样会不会引起异常呢?本着“实践出真知”的精神,从床上爬起来,我又一次打开了VS和OD。
测试函数代码如下:
void test(char *pIn)
{
char buff1[50];
char buff2[50];
buff2[0]=buff2[1]=buff2[2]=buff2[3]='a';
strcpy(buff1,pIn);
return;
}
输入数据pIn长度为75字节。
说句题外话,按照顺序压栈的话,应该是buff2更靠近栈顶才对啊,就像上次一样。可是VS不知他怎么想的,实验证明是buff2更靠近栈顶,这又折腾了我半天,差点实验结果都解读错了。再议再议。
结果VS编译选项选择了GS,但是还是没有报错。打开OD,结果如下。
复制到一半的时候