初级栈溢出-数组越界

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初级栈溢出-数组越界相关的知识,希望对你有一定的参考价值。

#include"stdio.h"
#define PASSWORD "123456"

int verify_password (char *password)
{
	int authenticated;
	char buffer[8];
	authenticated=strcmp(password,PASSWORD);
	strcpy(buffer,password);
	return authenticated;
}
main()
{
	int valid_flag=0;
	char password[1024];
	while(1)
	{
		printf("please input password:  ");
		scanf("%s",password);
		valid_flag=verify_password(password);
		if(valid_flag)
		{
			printf("incorrect password!\n");
		}
		else
		{
			printf("congratulation!\n");
			break;
		} 
	}
}

 //初级实验代码;

程序通过请求得到两段内存空间,并且两段内存空间相邻;

我们通过输入改变输入的位数,使数组最后的截断符%00溢出至下一个储存空间authenticated使其中的数据变为0,得到我们想要的输出。

理论上应该是8个数字或字母溢出,17个崩溃

但是自己验证时却是12个溢出,17个崩溃正常?????

 

以上是关于初级栈溢出-数组越界的主要内容,如果未能解决你的问题,请参考以下文章

内存溢出内存泄露内存越界缓冲区溢出栈溢出

内存溢出内存泄露内存越界缓冲区溢出栈溢出

调试教程

调试教程

Jmeter中outofmemoryError内存溢出、数组越界等问题汇总

GDB调试之二栈溢出