您的位置:首页 > 编程语言 > C语言/C++

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

2014-10-03 12:09 411 查看
摘要: 堆缓冲区溢出的初步了解

之前在网上看到的,自己后来试着写了一下,算是对缓冲区溢出的初步了解。

#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;
}

运行结果:

the param is 10

this is over flow function

(在WIN7 + VS运行,系统会提示异常,但结果确实运行出来了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: