分类:
2009-04-15 20:06:41
从提示的信息看,应该是程序的堆栈遭到破坏,但是难点在于,无法定位出破坏的原因。
经过分析,确实是由于访问堆栈越界造成。例如下面:
char *p;
sour[20];
memset(sour, 's', sizeof(sour));
p = (char *)calloc(10,char);
............
memcpy(p, sour, sizeof(sour));//问题之源,但这里并不会出错
free(p);//这里就会发生上述问题。从这里来看,我们一眼就看到是访问越界,但在实际的代码中,发现这一点却没有这么简单,当然这也取决于代码的复杂程度。
但是可以明确一点的是,要仔细检查是否访问申请的堆栈发生的越界。
参考: