Windbg调试栈破坏
1、拿到dump文件,输入命令~*kbn,发现异常出现在14号线程,下面是14号线程的调用栈。一般来说,对付“kernel32!UnhandledExceptionFilter+0x1af”的方法是输入命令“.cxr poi(0xXXXXXXXX+4)”,(其中0xXXXXXXXX为第一个参数,即红色标出位置的值)即可看到发生异常前的调用栈。但是在本实例中这个值为0x00000000,是个无效地址,我们已经不能用常规方法看到调用栈了

3、栈的结构,栈是从高地址开始压栈的. 如下图,函数中存在函数调用,首先是Frame1压栈,然后是Frame2压栈.其调用关系是Frame1调用Frame2. 对于参数的压栈windows默认的stdcall,cdell都是从右边参数开始压栈.而delph所试用的passcall是从左开始压栈. 因此,加入存在一个函数fun(int p1, int p2); 其压栈如下图

5、常见的相关问题A、栈溢出:一个线程的内核栈只有12K大小,耗尽了就会溢出,所以开发人员须注意尽量不要在栈上分配超过1K的内存,不能递替调用,但是如果调用太深的话,还是会溢出的。那么如何判断堆栈溢出呢? windbg有一个非常有用的命令kf -n ,其中n是要显示的frame数. 举例


声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:30
阅读量:86
阅读量:85
阅读量:65
阅读量:20