码迷,mamicode.com
首页 > 其他好文 > 详细

跟踪调试技巧

时间:2014-12-15 18:39:41      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:sp   文件   代码   程序   如何   ip   简单   函数   记录   

由于程序控制的EIP最终为0c0c0c0c,如果不修改一下的话,跟踪调试的时候,调试器是不会停下来的,那么很简单,直接把0c0c0c0c改为FFFFFFFF即可,这样调试器会发现程序在执行非法内存地址的指令,就会停下来。停下来后,你可以去检查栈中的蛛丝马迹。根据函数调用的原理,我们可以知道覆盖EIP为FFFFFFFF前执行的指令应该是RET指令,在这个指令执行前一定有一个函数被调用,而这个函数也很有可能就是最终发生溢出的函数,那么在ESP指向的栈空间的上部一定有一些返回地址,那么我们可以把几个可以的返回地址记下来,然后在下一次程序加载了这个地址所属的dll文件或exe文件时拦截,并把断点下到刚才记录下来的地址紧邻的前一条指令处,那么一旦断下来,有两种境况,第一种情况是,栈还未被覆盖,说明溢出还没有发生,那么只要单步跟踪仔细调试,就可以跟到发生溢出的那行代码;第二种境况是,栈已经被覆盖了,那说明记录下来的几个可疑地址是不正确的,根本就没有在这些函数内部发生溢出,这就需要在刚才发生了溢出后的栈中继续前溯,一定会在溢出之前断下程序,因为无论如何程序在溢出之前一定调用过某个程序。而这个程序的返回地址会保存在栈中。

跟踪调试技巧

标签:sp   文件   代码   程序   如何   ip   简单   函数   记录   

原文地址:http://www.cnblogs.com/exp-pekin/p/4165319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!