通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
C语言代码
void HW()
{
printf("Hello World");
getchar();
}
void Fun()
{
int arr[5] = {1,2,3,4,5};
arr[6] = (int)HW;
}
int main()
{
Fun();
return 0;
}
输出结果
反汇编代码
缓存区溢出攻击
简而言之,改变EIP的值,使程序运行到攻击者指定的地方
补充
在C语言char short这些小于32位的变量,空间在分配时,按32位(int型)分配.
原因
1、本机尺寸:如果本机是32位的,那么对32位的数据支持最好,如果是64位的,那么对64位的支持
2、编译器遵守了这个规则:
3、char类型或者short类型的参数不但没有节省空间,反而浪费了多余的操作.