zoukankan      html  css  js  c++  java
  • windbg 常用命令详解

     = 
    kd> ln 8046e100 
    (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendResource
    Exact matches: 
    nt!KeServiceDescriptorTableShadow =

    31、!gle 查看LastError值
    32、指定进制的形式0x/0n/0t/y 分别表示 16/10/8/2进制

    ? 0x12345678+0n10 
    Evaluate expression: 305419906 = 12345682 
    33、!sym noice/quiet symbol prompts开关

    34、srcpath 设置源代码的路径
    35、dv查看本地变量
    36、!teb 显示当前线程的执行块(execution block)
    37、!peb 显示当前进程的执行块(execution block)
    38、ln[Address] 显示当前地址上的对象类型
    39、!locks 显示死锁
    40、!handle可以获取整个进程或者某一个handle的详细信息

    首先运行以下!handle,可以看到当前进程的每个一个handle的类型,以及统计信息
    0:002>!handle
    Handle 4
    Type key
    Handle c
    Type keyEvent
    …….
    然后找到一个key,查看详细信息
    0:001>!handle 4 f
    就会列出这个handle的详细信息。
    41!htrace命令检查操作句柄的历史记录
    !htrace命令可以打印出指定的handle的最近几次调用堆栈
    0:001>!htrace 384

    42、!cs列出CriticalSection的详细信息
    43、!threadpool能看到完成端口,线城池工作线程和timer回调占线程池的情况
    44、time 可以看到进程跑了多长时间
    45、 !dso 查看当前线程中有哪些对象,分析泄露时用到
    46、dump保存进程的dump文件

    Dump文件是进程的内存镜像,

    可当在调试器中打开dump文件时,使用上面的命令检查,看到的结果跟用调试检查进程看到的一样
    .dump /ma c://testdump.dmp
    这个命令把当前进程的镜像保存为c://testdump.dmp,其中/ms参数表示dump的文件应该包含进程的完整信息。
    在windbg中,通过file—open---open Crash dump菜单打开dump文件进行分析。打开文件后,运行调试命令看到的信息和状态就是dump文件保存时进程的状态。通过dump文件能够方便的保存发生问题时进程的状态,方便事后分析。

    47、
    [plain] view plaincopy
     
    1. 0: kd> !idt                           //查看中断向量表内容  
    2. 0: kd> dt nt!_KINTERRUPT 89c03bb0     //查看对应中断向量的详细内容  
    3. 0: kd> !ioapic                        //显示I/O APIC(即连接至设备的中断控制部件)  
    4. 0: kd> !pic                           //   
    5. 0: kd> !apic                          //有关PIC的配置情况  


    kd> !idt运行后显示为

    [plain] view plaincopy
     
    1. 0: kd> !idt  
    2.   
    3. Dumping IDT:  
    4.   
    5. 37: 806e7864 hal!PicSpuriousService37  
    6. 3d: 806e8e2c hal!HalpApcInterrupt  
    7. 41: 806e8c88 hal!HalpDispatchInterrupt  
    8. 50: 806e793c hal!HalpApicRebootService  
    9. 63: 89ac57e4 USBPORT!USBPORT_InterruptService (KINTERRUPT 89ac57a8)  
    10.              USBPORT!USBPORT_InterruptService (KINTERRUPT 8982abb0)  
    11. 73: 89d6767c atapi!IdePortInterrupt (KINTERRUPT 89d67640)  
    12.              atapi!IdePortInterrupt (KINTERRUPT 89dc4bb0)  
    13. 83: 89c1471c VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 89c146e0)  
    14.              HDAudBus!AzController::Isr (KINTERRUPT 89c16ac8)  
    15.              NDIS!ndisMIsr (KINTERRUPT 89847bb0)  
    16. 94: 8976fbec USBPORT!USBPORT_InterruptService (KINTERRUPT 8976fbb0)  
    17. a4: 89770bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89770bb0)  
    18. b1: 89d859e4 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 89d859a8)  
    19. b4: 89c03bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89c03bb0)  
    20. c1: 806e7ac0 hal!HalpBroadcastCallService  
    21. d1: 806e6e54 hal!HalpClockInterrupt  
    22. e1: 806e8048 hal!HalpIpiHandler  
    23. e3: 806e7dac hal!HalpLocalApicErrorService  
    24. fd: 806e85a8 hal!HalpProfileInterrupt  
    25. fe: 806e8748 hal!HalpPerfInterrupt  
    26. //前部分是使用的中断类型号。例如83号中断是有三个硬件复用。  


     

    2.0: kd> dt nt!_KINTERRUPT 89c03bb0,运行后显示为

    [plain] view plaincopy
     
    1. 0: kd> dt nt!_KINTERRUPT 89c03bb0  
    2.    +0x000 Type             : 0n22  
    3.    +0x002 Size             : 0n484  
    4.    +0x004 InterruptListEntry : _LIST_ENTRY [ 0x89c03bb4 - 0x89c03bb4 ]  
    5.    +0x00c ServiceRoutine   : 0xb9159e54     unsigned char  USBPORT!USBPORT_InterruptService+0  
    6.    +0x010 ServiceContext   : 0x89c38028 Void  
    7.    +0x014 SpinLock         : 0  
    8.    +0x018 TickCount        : 0xffffffff  
    9.    +0x01c ActualLock       : 0x89c03e14  -> 0  
    10.    +0x020 DispatchAddress  : 0x805466d0     void  nt!KiInterruptDispatch+0  
    11.    +0x024 Vector           : 0x1b4  
    12.    +0x028 Irql             : 0xa ''  
    13.    +0x029 SynchronizeIrql  : 0xa ''  
    14.    +0x02a FloatingSave     : 0 ''  
    15.    +0x02b Connected        : 0x1 ''  
    16.    +0x02c Number           : 0 ''  
    17.    +0x02d ShareVector      : 0x1 ''  
    18.    +0x030 Mode             : 0 ( LevelSensitive )  
    19.    +0x034 ServiceCount     : 0  
    20.    +0x038 DispatchCount    : 0xffffffff  
    21.    +0x03c DispatchCode     : [106] 0x56535554  


     

    3.0: kd> !ioapic,运行后显示

    [plain] view plaincopy
     
    1. 0: kd> !ioapic  
    2. IoApic @ FEC00000  ID:8 (20)  Arb:170020  
    3. Inti00.: 52000000`000100ff  Vec:FF  FixedDel  Ph:52000000      edg high      m  
    4. Inti01.: 00c00000`000100ff  Vec:FF  FixedDel  Ph:00C00000      edg high      m  
    5. Inti02.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    6. Inti03.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    7. Inti04.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    8. Inti05.: 52c00000`000100ff  Vec:FF  FixedDel  Ph:52C00000      edg high      m  
    9. Inti06.: 00c00000`000100ff  Vec:FF  FixedDel  Ph:00C00000      edg high      m  
    10. Inti07.: 02000000`000100ff  Vec:FF  FixedDel  Ph:02000000      edg high      m  
    11. Inti08.: 01000000`000008d1  Vec:D1  FixedDel  Lg:01000000      edg high         
    12. Inti09.: 03000000`0000d9b1  Vec:B1  LowestDl  Lg:03000000-Pend lvl high rirr    
    13. Inti0A.: 00c00000`000100ff  Vec:FF  FixedDel  Ph:00C00000      edg high      m  
    14. Inti0B.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    15. Inti0C.: 42000000`000100ff  Vec:FF  FixedDel  Ph:42000000      edg high      m  
    16. Inti0D.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    17. Inti0E.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    18. Inti0F.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    19. Inti10.: 03000000`0000f983  Vec:83  LowestDl  Lg:03000000-Pend lvl low  rirr    
    20. Inti11.: 00000000`000100ff  Vec:FF  FixedDel  Ph:00000000      edg high      m  
    21. Inti12.: 03000000`0000a994  Vec:94  LowestDl  Lg:03000000      lvl low          
    22. Inti13.: 00c00000`000100ff  Vec:FF  FixedDel  Ph:00C00000      edg high      m  
    23. Inti14.: 03000000`0000a973  Vec:73  LowestDl  Lg:03000000      lvl low          
    24. Inti15.: 03000000`0000a963  Vec:63  LowestDl  Lg:03000000      lvl low          
    25. Inti16.: 03000000`0000a9a4  Vec:A4  LowestDl  Lg:03000000      lvl low          
    26. Inti17.: 03000000`0000f9b4  Vec:B4  LowestDl  Lg:03000000-Pend lvl low  rirr    


     

    4.0: kd> !pic ,运行后显示

    [plain] view plaincopy
     
    1. 0: kd> !pic  
    2. ----- IRQ Number ----- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  
    3. Physically in service:  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  
    4. Physically masked:      Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  Y  
    5. Physically requested:   Y  .  .  Y  .  Y  .  .  Y  Y  Y  Y  .  .  .  .  


     

    5.0: kd> !apic,运行后显示

    [plain] view plaincopy
     
    1. 0: kd> !apic  
    2. Apic @ fffe0000  ID:0 (50014)  LogDesc:01000000  DestFmt:ffffffff  TPR FF  
    3. TimeCnt: 0fdad680clk  SpurVec:1f  FaultVec:e3  error:40  
    4. Ipi Cmd: 02000000`000008e1  Vec:E1  FixedDel  Lg:02000000      edg high         
    5. Timer..: 00000000`000300fd  Vec:FD  FixedDel    Dest=Self      edg high      m  
    6. Linti0.: 00000000`0001001f  Vec:1F  FixedDel    Dest=Self      edg high      m  
    7. Linti1.: 00000000`000084ff  Vec:FF  NMI         Dest=Self      lvl high         
    8. TMR: 63, 73, 83, 94, A4, B1, B4  
    9. IRR: 41, B1, D1  
    10. ISR: D1  

     48、.cls

     .cls用于清屏

    注意:得在windbg处于命令行模式时才可用(即按了Ctro+Break)

     或者直接使用工具栏:

    二、

    Windbg断点命令

    1. 设置断点命令bu bp bm ba

    1) bu bp bm设置软件断点

    a). bp设置地址关联的断点

    b). bu设置符号关联的断点

    c). bm支持设置含通配符的断点,可以一次创建一个或多个bu或bp (bm /d)断点

    bp和bu的主要区别

    a) bp所设断点和地址关联,如果模块把该地址的指令移到其它地方,断点不会随之移动,而是依然关联在在原来的地址上; 而bu所设断点是和符号关联,如果符号的地址改变了,断点依然保持和原来的符号关联。

    b) 如果bp所设断点的地址在加载的模块中被找到,后来软件模块被卸载,断点会被自动移除;而bu所设断点则会一直存在。

    c) bp设置的断点不会被保存windbg的workspace中,bu设置的断点会则会被保存下来。

    2)ba设置硬件断点(数据断点)

    硬件断点是指当一个内存地址被访问(读、写、执行)或IO端口被访问时触发的断点。

    2. 其它命令bl bc bd be .bpcmds

    bl 列举所有断点和它们的状态

    bc 删除对应断点

    bd 禁用对应断点

    be 启用对应断点

    .bmcmds 列举所有断点以及创建它们的命令

    3. 软件断点和硬件断点

    1) 软件断点 - 调试工具控制的断点。当调试器在某个地址设置一个断点,它会首先把该地址的内容保存,零时插入一条中断指令(如int3 (0xCC)),当程序执行到该地址是cpu进入调试状态,当调试结束,程序重新载入该地址原先的指令重新执行下去。

    2) 硬件断点 - 又称为数据断点,是处理器控制的断点,可以用来监控某个内存地址的访问(读、写、执行)和IO地址的访问(读、写)。处理器中有相应的调试寄存器,用来记录数据断点的地址,当该地址(内存地址或IO端口地址)被访问时,断点将被触发,cpu进入调试状态。

    3) 软件断点和硬件断点的区别

    a)理论上我们可以设置无穷多个软件断点,但设置软件断点会使程序变慢,尤其在内核态影响比较大,调试器大多会对断点数量加以限制。例如Windbg在内核态最多支持32个软件断点,在用户态则支持任意多个;硬件断点数量取决于处理器,例如X86支持四个断点(80386有八个调试寄存器-DR0~DR3用于断点,DR4~DR5保留,DR6~DR7用于控制)。

    b)软件断点需要修改相应代码,所以它不能调试时flash和rom中的代码;而硬件则没有这个限制。

    3. 参考资料

    1. http://www.lslnet.com/linux/dosc1/59/linux-389058.htm

    2. http://blog.csdn.net/wingeek/article/details/4025475

    3. http://embexperts.com/viewthread.php?tid=69

    4. http://msdn.microsoft.com/en-us/library/ff538903%28v=VS.85%29.aspx

    5. http://msdn.microsoft.com/en-us/library/ff538165%28v=VS.85%29.aspx

    6. http://msdn.microsoft.com/en-us/library/ff553451%28v=VS.85%29.aspx

    1. 使用!process 0 0 获取用户空间的所有的进程的信息

    如果有多个相同进程名,!process 0 0 SampleExe.exe

    kd> !process 0 0
    **** NT ACTIVE PROCESS DUMP ****
    PROCESS fe5039e0  SessionId: 0  Cid: 0008    Peb: 00000000  ParentCid: 0000
        DirBase: 00030000  ObjectTable: fe529b68  TableSize:  50.
        Image: System

    2.使用.process /i 指定进程地址

    因为要对用户态代码下断点,这里不用/p,而使用/i

    If you want to use the kernel debugger to set breakpoints in user space, use the/i option to switch the target to the correct process context.

    3. g继续,再次发生int 3中断后,进程Context就已切换,使用!process查看确认。

    4. reload符号文件。

    5. bu, bp下用户态断点。

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/decode1234/p/7509138.html
Copyright © 2011-2022 走看看