以前在网上看到的,本身后来试着写了一下,算是对缓冲区溢出的初步了解。函数
#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