一个栈溢出的经典代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdio.h> #include <string.h> void overflow(char* buf) { char des[5]=""; strcpy(des,buf); return; } void main() { char longbuf[100]="aaaaaabbbbbccccc"; overflow(longbuf); return; } |
longbuf里有15个字符,而des只能容纳5个字符,所以这就会产生缓冲区溢出。正是因为先放入栈里的地址在前,而后进入栈的数据一旦很长,就会覆盖到前面的地址,这就会导致程序发生错误。
转载请注明:exchen's blog » 栈溢出的经典代码