zoukankan      html  css  js  c++  java
  • 如何分析一个dump

    设置symbols

    kd>.sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols

    这个的意思是去C:\Symbols找symbols,如果没有就会去M$的服务器下载对应的symbols.

    另外在File-> Symbos File Path也可以设置

    打开dump文件, !analyze -v

    !analyze –v 在STACK_TEXT:里面可以看到自己的驱动,如果是自己的驱动问题。高版本的Windbg还会给出错的源代码,当然这是需要pdb的。

    这个命令其实可以看到许多信息,基本定位驱动的问题大概在什么地方

    STACK_TEXT:

    WARNING: Frame IP not in any known module. Following frames may be wrong.

    ..

    f88f2d58 805b9ee5 80000234 8123a000 81e826e8 nt!IopLoadDriver+0x5e1

    这行(frame)主要的信息是

    • f88f2d58  IopLoadDriver调用时的ebp
    • 805b9ee5 IopLoadDriver调用后返回的返回地址
    • 80000234 IopLoadDriver第一个参数

    frame和callstack差不多一个概念。只要理解调用约定,就应该明白。

    基本上,在有源码的情况下,这样用Windbg已经足够分析驱动的bug了。

    对于双机调试,如果不习惯完全可以用UI操作,不用去记着些命令。不过我个人还是喜欢命令调试。

    主要用的命令
    • d系列命令主要是查看内存
    • r系列查看寄存器
    • b系列和断点有关系
    • u系列就是反汇编
    • x可以看函数的原型
    多参考BugCheck表
    • Windbg文档里面有
    • kd> !analyze -show Code
    关于C调用约定的一些解释
    ;假设
    ;ebp=0x80000000
    ;esp=0x90000000
    ;ebp+arg1 和 ebp+arg1的内容为10,20
    mov eax [ebp+arg2] ;得到参数2
    push eax           ;参数2入栈,esp=90000000h-4h
    mov eax [ebp+arg1] ;得到参数1
    push eax           ;参数1入栈,esp=90000000h-8h

    call foo           ;返回eip入栈,esp=90000000h-ch


    foo:
    ;以下是肯定会这样编译的
    push ebp           ;调者的ebp入栈,esp=90000000h-10h
    mov ebp,esp           ;把ebp设置为当前esp,此时,ebp=90000000h-10h
    ;以下用ebp访问参数,无论如何以下3句完成后,esp=90000000h-10h,这样就能保证不乱
    mov eax,[ebp+0x8;ebp+8h为90000000h-8h,即参数1的地址
    mov ecx,[ebp+0xc;ebp+ch为90000000h-4h,即参数2的地址
    add eax,ecx           ;把参数2的值加到参数1上,eax=30
    ;以下是肯定会这样编译的
    pop ebp            ;调用者的ebp出栈,esp=90000000h-ch
    ret                   ;恢复eip
  • 相关阅读:
    ES自身支持容灾异地容灾么?生产环境如何实施?
    Redis集群详解
    原生js实现jquery的ajax
    用原生js实现jquery的一些方法
    原生javascript的一些常用方法
    原生javascript
    理解和熟练运用call和apply
    做项目过程中的css reset
    深入理解javascript编程中的同步和异步
    history.back(-1)和history.go(-1)的区别
  • 原文地址:https://www.cnblogs.com/iwasmu/p/1543900.html
Copyright © 2011-2022 走看看