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

windbg 常用命令详解的更多相关文章

  1. 【转载】windbg 常用命令详解

    windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...

  2. hbase shell基础和常用命令详解(转)

    HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...

  3. samtools常用命令详解(转)

    转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...

  4. cisco常用命令详解

    cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...

  5. H3C常用命令详解

    H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...

  6. hbase shell基础和常用命令详解

    HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...

  7. Tmux 的常用命令详解

    Tmux 的常用命令详解  常用命令: tmux #开启tmux tmux ls #显示已有tmux列表(C-b s) tmux attach-session -t 数字 #选择tmux C-b c ...

  8. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  9. DOS常用命令详解

    DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...

随机推荐

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

  2. Django创建一个简单的blog

    1. 使用django-admin.py 创建mysite项目 sunny@sunny-ThinkPad-T450:~/PycharmProjects$ django-admin.py startpr ...

  3. FreeSWITCH--配置代接电话

    配置代接电话,需要更改 分机.拨号计划.外线 的配置 一.配置分机 代接组内分机的这个“组”, 不是“conf/directory/default.xml"中配置的 group,而是要在分机 ...

  4. Navicat修改查询保存路径

    mysql使用navicat查询时有时候会有很多sql语句, ctrl+s时自动保存在C:\Users\Administrator\Documents\Navicat\MySQL\servers\lo ...

  5. 修改字符集AL32UTF8修改为ZHS16GBK详解

    登陆sqlplus,在命令行输入 sqlplus sys/sys as sysdba;//登陆sqlplus SQL>SHUTDOWN IMMEDIATE; SQL>STARTUP MOU ...

  6. C#HTML解析利器HtmlAgilityPack

    HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手.目前 ...

  7. Linux网络配置之虚拟网卡的配置(Red Hat 6.5)

    怎么查看当前的网络状态,这里就不着重描述,用ifconfig命令就可以.我们直接进入主题. red hat系统中的网卡配置在这个目录中:/etc/sysconfig/network-scripts 1 ...

  8. Texstudio

    Texstudio快捷键:Ctrl+T,选中之后按这个可以快速注释

  9. 视觉SLAM漫淡(二):图优化理论与g2o的使用

    视觉SLAM漫谈(二):图优化理论与g2o的使用 1    前言以及回顾 各位朋友,自从上一篇<视觉SLAM漫谈>写成以来已经有一段时间了.我收到几位热心读者的邮件.有的希望我介绍一下当前 ...

  10. Redis安装及HA(High Availability)配置(转)

    出处:http://www.cnblogs.com/morvenhuang/p/4184262.html Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的 ...