关于缓冲区到函数返回地址分析

用gdb调试可执行程序h(从附件下载h.tar.gz),计算缓冲区起始地址与函数foo返回地址的距离。调试过程

一,基本原理:
设置断点表示将要执行的下一条指令 此时eip将会指向断点处的指令
gdb中反汇编后结构

gdb调试中设置断点表示即将进入下一条的指令为断点处,即eip指向breakpoint处
strcpy(buffer,Lbuffer)表示从右至左压入栈中所以Lbuffer会在高地址处
在函数调用时会先压入返回地址,作业中也即在调用设置断点处的寄存器中的值,所以foo返回地址的值也即是在设置断点*(foo+0)之前在foo栈帧内压入 下图中设置为$1; 或者在进入foo栈后获取ebp的值利用ebp+4的值也即是foo返回地址
在调用strcpy函数时foo会将参数从右到左压入栈中,此时设置断点在调用strcpy后buffer下降设置成返回地址

二,主要步骤
1.反汇编两个函数:
这里写图片描述

2.获得调用前的值esp

这里写图片描述

3.获得buffer地址并计算距离
这里写图片描述
附:验证栈帧结构
这里写图片描述

三,使用到的基本gdb调试命令
1.进入gdb调试
gdb ./h
2.设置断点
b *(foo+0)
b *(foo+21)
b *(foo+27)
3.运行
r
4.查看寄存器
i r
5.查看内容
x/x $esp
x/wx 0x0804****
x/4wx ** 显示4个
6.退出
ctrl+z
YC,Ustc
附件地址:http://pan.baidu.com/s/1dDs6MNv

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值