[C/C++]初识缓冲区溢出

以前在网上看到的,本身后来试着写了一下,算是对缓冲区溢出的初步了解。函数

#include <stdio.h>
#include <stdlib.h>

//溢出以后调用的函数
void OverFlowFun()
{
	printf("this is over flow function\n");
}

//普通函数
void NormalFun(int iParam)
{
	int iParamAddress = (int)&iParam; //参数地址
	
	//函数调用结束的返回地址
	//函数调用首先将参数压栈,经过参数地址能够获取函数返回地址
	//将该指针指向的内存内容修改成OverFlowFun函数指针,NormalFun函数调用结束后会调用OverFlowFun函数
	int iReturnAddress = iParamAddress - 4; 
	
	int iOverFlowFunAddress = (int)OverFlowFun;
	int* pAddress = (int*)iReturnAddress;
	*pAddress = iOverFlowFunAddress; //将返回地址修改成溢出函数的地址

	printf("the param is %d\n", iParam);
}

int main()
{
	NormalFun(10);
	return 0;
}

运行结果:
this

the param is 10指针

this is over flow functioncode

(在WIN7 + VS运行,系统会提示异常,但结果确实运行出来了)orm

相关文章
相关标签/搜索