#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define FILENAME "myoutfile"
int main(int argc, char *argv[])
{
FILE *fd;
long diff;
char bufchar[100];
char *buf1=malloc(20);
char *buf2=malloc(20); //heap
diff=(long)buf2-(long)buf1;
strcpy(buf2,FILENAME);
printf("---display info---\n");
printf("buf1 memoru: %p:\n",buf1);
printf("buf2 memory: %p,memory name:%s\n",buf2,buf2);
printf("The distance of buf2 and buf1: %d byte",diff);
printf("----The End----\n\n");
if(argc<2)
{
printf("Please input the input-data:\n");
gets(bufchar);
strcpy(buf1,bufchar);
}
else
{
strcpy(buf1,argv[1]);
}
printf("---display info----\n");
printf("buf1-data:%s\n",buf1);
printf("buf2-data:%s\n",buf2);
printf("---End Info---\n\n");
printf("write buf1:%s \nto buf2 %s \n",buf1,buf2);
fd=fopen(buf2,"a");
if(fd==NULL)
{
fprintf(stderr,"%s OPen_Wrong",buf2);
exit(1);
}
fprintf(fd,"%s \n",buf1);
fclose(fd);
getchar();
return 0;
}
正常:
溢出覆盖:
注:如果覆盖的区域是密码等重要信息的话,问题就大了