第2章 栈溢出原理与实践
这一章,我们将做2个实验
- 通过栈溢出,修改邻接变量
- 通过栈溢出,修改函数返回地址
实验1:修改邻接变量
P47,研究源码如下
#include <stdio.h>
#define PASSWORD "1234567"
int verify_password(char *password)
{
int authenticated;
char buffer[8];//add local buffer to be overflowed
authenticated=strcmp(password,PASSWORD);
strcpy(buffer,password);//over flowed here!
return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
while(1)
{
printf("please input password:\n");
scanf("%s",password);
valid_flag=verify_password(password);
if(valid_flag)
{
printf("wrong\n");
}
else
{
printf("right\n");
break;
}
}
}
verify_password函数的栈帧布局如下