通过Windbg查找栈溢出的方法之一

在阅读《windows高级调试》时看到此方法,自己作下笔记,以免忘记。


1、在一个程序或者产品出错后,使用Windbg进行进程附加。
2、查看当前程序执行到何处,即eip的值,通过命令lm a eip 查看当前程序执行到什么模块了,若是正常的,下面eip=7c875f53,一般会像下面一样显示(最后一部分是符号文件):
lm a eip
start    end        module name
7c800000 7c91e000   kernel32   (pdb symbols)          d:\sym\kernel32.pdb\072FF0EB54D24DFAAE9D13885486EE092\kernel32.pdb


若是是一个无效的地址则会什么都不显示,比如对地址123456进行显示,则会显示如下:
lm a 123456
start    end        module name
因为我的机器在这个地址上没有加载任何模块,所以显示为空。
3、知道了eip现在执行到何处,现在也可以看看eip的内容,通过dd或db类的命令进行查看。
4、查看当前栈的情况,可以使用dd esp,可以看到是一些乱七八糟的数据,对个些数据最主要的是看最近几次的正确的返回地址,由此确认在那个调用后出现的栈溢出,不过我倒觉得用dd esp没有dds esp方面,大家试试就知道了。
5、找到栈出现问题的地方后,就可以通过代码定位到具体的程序中了,






这是我看完这本书第5章《内存破坏之一--栈》一周后,凭记忆写的,中间可能有些东西记得不太完整了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值