windows 堆栈溢出简易测试代码

环境:windows xp sp2 + vc 6.0

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 1#include <stdio.h>
 2
 3int fun2()
 4ExpandedBlockStart.gifContractedBlock.gif{
 5    printf("-------------Get privilege!---------\n");
 6    getchar();
 7    return 0;
 8}

 9
10int fun1()
11ExpandedBlockStart.gifContractedBlock.gif{
12    int iRet = 0;
13    int *pRet = &iRet;
14    pRet = pRet + 2;
15    *pRet = (int )&fun2;
16    return 0;
17}

18
19int main(void)
20ExpandedBlockStart.gifContractedBlock.gif{
21    fun1();
22    return 0;
23}

 

执行后会在控制台打印出-------------Get privilege!---------,并在下一行等待输入。

溢出主要发生在13-15行,通过pRet获取iRet在堆栈中的位置,然后相对偏移到存放函数的返回地址处,由第15行代码用fun2的地址覆盖返回地址,当fun1返回时将跳转到fun2执行。

转载于:https://www.cnblogs.com/anzhihun/archive/2008/12/10/1351944.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值