如何运行时检测缓冲区溢出?

时间:2010-11-26 16:08:39

标签: 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          0x001afa40
 bufAfter     0x001afa18 

语句“buf [8] ='\ 0'”将地址写入buf。当我运行该程序时,操作系统报告“调试错误:运行时检查失败#2 - 变量'buf'周围的堆栈已损坏。”

然后我将其编译为发布项目。它安静地运行,没有提出任何错误报告。

我的问题是运行时检测缓冲区如何溢出?

0 个答案:

没有答案