缓冲区溢出
缓冲区溢出
缓冲区溢出是一个老生常谈的安全问题,非常多的病毒和蠕虫通过缓冲区溢出来执行恶意代码。
C对于数组引用不进行任何边界检察,而且局部变量和状态信息都存储在当前状态栈中。当当前状态栈被破坏时,例如ret地址被覆盖等,危险就此产生。
下面用一个例子来进行说明,先来看这段C代码
#include <stdio.h>
char* gets(char* s)
{
int c;
char* dest = s;
while ((c = getchar()) != '\n' && c != EOF)
*dest++ = c;
if (c == EOF && dest == s)
return NULL;
*dest++ = '