C 运行时如何检测缓冲区溢出?
在Windows 7上,我使用Visual Studio 2008作为调试项目编译了以下代码段:C 运行时如何检测缓冲区溢出?,c,runtime,overflow,buffer,C,Runtime,Overflow,Buffer,在Windows 7上,我使用Visual Studio 2008作为调试项目编译了以下代码段: { char bufBef[32]; char buf[8]; char bufAfter[32]; sprintf(buf,"AAAAAAA\0"); buf[8]='\0'; printf("%s\n",buf); } 三个缓冲区相邻。我使用调试器查找它们的地址,如下所示: bufBef 0x001afa50 buf
{
char bufBef[32];
char buf[8];
char bufAfter[32];
sprintf(buf,"AAAAAAA\0");
buf[8]='\0';
printf("%s\n",buf);
}
三个缓冲区相邻。我使用调试器查找它们的地址,如下所示:
bufBef 0x001afa50
buf 0x001afa40
bufAfter 0x001afa18
语句“buf[8]='\0'”从buf中写入地址。当我运行程序时,操作系统报告“调试错误:运行时检查失败#2-变量'buf'周围的堆栈已损坏。”
然后我将其编译为一个发布项目。它安静地运行,没有出现错误报告
我的问题是运行时如何检测缓冲区溢出