在缓冲区存储范围内能够正常打印
超出存储范围不能正常运行
输入情况超出范围出现死循环不断打印“liulele”
利用缓冲区溢出攻击代码:
#include
#include
#include
void fun(char *input)
{
char buffer[10];
strcpy(buffer,input);
printf("缓冲区字符为=%s",buffer);
}
void fun1()
{
printf("Call fun1");
while(1)
{
printf("liulele");
}
}
int main( )
{
char a[100];
printf("Address of fun1=%p\n",fun1);//打印存储用于攻击的可用地址
printf("请输入相应字符:");
//scanf("%s",a);
fun("abcdefghijklmn12\x0A\x10\x40");
return 0;
}
进行防御,当输入长度过长时跳出
编写代码进行防护:
#include
#include
#include
void fun(char *input)
{
char buffer[10];
int b;
b=strlen(input);
if(b<=10)
{
strcpy(buffer,input);
printf("缓冲区字符为=%s",buffer);
}
else
printf("字符长度过长");
}
void fun1()
{
printf("Call fun1");
while(1)
{
printf("liulele");
}
}
int main( )
{
char a[100];
printf("Address of fun1=%p\n",fun1);//打印存储用于攻击的可用地址
printf("请输入相应字符:");
scanf("%s",a);
fun(a);
return 0;
}