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、
- 0: kd> !idt //查看中断向量表内容
- 0: kd> dt nt!_KINTERRUPT 89c03bb0 //查看对应中断向量的详细内容
- 0: kd> !ioapic //显示I/O APIC(即连接至设备的中断控制部件)
- 0: kd> !pic //
- 0: kd> !apic //有关PIC的配置情况
kd> !idt运行后显示为
- 0: kd> !idt
- Dumping IDT:
- 37: 806e7864 hal!PicSpuriousService37
- 3d: 806e8e2c hal!HalpApcInterrupt
- 41: 806e8c88 hal!HalpDispatchInterrupt
- 50: 806e793c hal!HalpApicRebootService
- 63: 89ac57e4 USBPORT!USBPORT_InterruptService (KINTERRUPT 89ac57a8)
- USBPORT!USBPORT_InterruptService (KINTERRUPT 8982abb0)
- 73: 89d6767c atapi!IdePortInterrupt (KINTERRUPT 89d67640)
- atapi!IdePortInterrupt (KINTERRUPT 89dc4bb0)
- 83: 89c1471c VIDEOPRT!pVideoPortInterrupt (KINTERRUPT 89c146e0)
- HDAudBus!AzController::Isr (KINTERRUPT 89c16ac8)
- NDIS!ndisMIsr (KINTERRUPT 89847bb0)
- 94: 8976fbec USBPORT!USBPORT_InterruptService (KINTERRUPT 8976fbb0)
- a4: 89770bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89770bb0)
- b1: 89d859e4 ACPI!ACPIInterruptServiceRoutine (KINTERRUPT 89d859a8)
- b4: 89c03bec USBPORT!USBPORT_InterruptService (KINTERRUPT 89c03bb0)
- c1: 806e7ac0 hal!HalpBroadcastCallService
- d1: 806e6e54 hal!HalpClockInterrupt
- e1: 806e8048 hal!HalpIpiHandler
- e3: 806e7dac hal!HalpLocalApicErrorService
- fd: 806e85a8 hal!HalpProfileInterrupt
- fe: 806e8748 hal!HalpPerfInterrupt
- //前部分是使用的中断类型号。例如83号中断是有三个硬件复用。
2.0: kd> dt nt!_KINTERRUPT 89c03bb0,运行后显示为
- 0: kd> dt nt!_KINTERRUPT 89c03bb0
- +0x000 Type : 0n22
- +0x002 Size : 0n484
- +0x004 InterruptListEntry : _LIST_ENTRY [ 0x89c03bb4 - 0x89c03bb4 ]
- +0x00c ServiceRoutine : 0xb9159e54 unsigned char USBPORT!USBPORT_InterruptService+0
- +0x010 ServiceContext : 0x89c38028 Void
- +0x014 SpinLock : 0
- +0x018 TickCount : 0xffffffff
- +0x01c ActualLock : 0x89c03e14 -> 0
- +0x020 DispatchAddress : 0x805466d0 void nt!KiInterruptDispatch+0
- +0x024 Vector : 0x1b4
- +0x028 Irql : 0xa ''
- +0x029 SynchronizeIrql : 0xa ''
- +0x02a FloatingSave : 0 ''
- +0x02b Connected : 0x1 ''
- +0x02c Number : 0 ''
- +0x02d ShareVector : 0x1 ''
- +0x030 Mode : 0 ( LevelSensitive )
- +0x034 ServiceCount : 0
- +0x038 DispatchCount : 0xffffffff
- +0x03c DispatchCode : [106] 0x56535554
3.0: kd> !ioapic,运行后显示
- 0: kd> !ioapic
- IoApic @ FEC00000 ID:8 (20) Arb:170020
- Inti00.: 52000000`000100ff Vec:FF FixedDel Ph:52000000 edg high m
- Inti01.: 00c00000`000100ff Vec:FF FixedDel Ph:00C00000 edg high m
- Inti02.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti03.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti04.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti05.: 52c00000`000100ff Vec:FF FixedDel Ph:52C00000 edg high m
- Inti06.: 00c00000`000100ff Vec:FF FixedDel Ph:00C00000 edg high m
- Inti07.: 02000000`000100ff Vec:FF FixedDel Ph:02000000 edg high m
- Inti08.: 01000000`000008d1 Vec:D1 FixedDel Lg:01000000 edg high
- Inti09.: 03000000`0000d9b1 Vec:B1 LowestDl Lg:03000000-Pend lvl high rirr
- Inti0A.: 00c00000`000100ff Vec:FF FixedDel Ph:00C00000 edg high m
- Inti0B.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti0C.: 42000000`000100ff Vec:FF FixedDel Ph:42000000 edg high m
- Inti0D.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti0E.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti0F.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti10.: 03000000`0000f983 Vec:83 LowestDl Lg:03000000-Pend lvl low rirr
- Inti11.: 00000000`000100ff Vec:FF FixedDel Ph:00000000 edg high m
- Inti12.: 03000000`0000a994 Vec:94 LowestDl Lg:03000000 lvl low
- Inti13.: 00c00000`000100ff Vec:FF FixedDel Ph:00C00000 edg high m
- Inti14.: 03000000`0000a973 Vec:73 LowestDl Lg:03000000 lvl low
- Inti15.: 03000000`0000a963 Vec:63 LowestDl Lg:03000000 lvl low
- Inti16.: 03000000`0000a9a4 Vec:A4 LowestDl Lg:03000000 lvl low
- Inti17.: 03000000`0000f9b4 Vec:B4 LowestDl Lg:03000000-Pend lvl low rirr
4.0: kd> !pic ,运行后显示
- 0: kd> !pic
- ----- IRQ Number ----- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
- Physically in service: . . . . . . . . . . . . . . . .
- Physically masked: Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
- Physically requested: Y . . Y . Y . . Y Y Y Y . . . .
5.0: kd> !apic,运行后显示
- 0: kd> !apic
- Apic @ fffe0000 ID:0 (50014) LogDesc:01000000 DestFmt:ffffffff TPR FF
- TimeCnt: 0fdad680clk SpurVec:1f FaultVec:e3 error:40
- Ipi Cmd: 02000000`000008e1 Vec:E1 FixedDel Lg:02000000 edg high
- Timer..: 00000000`000300fd Vec:FD FixedDel Dest=Self edg high m
- Linti0.: 00000000`0001001f Vec:1F FixedDel Dest=Self edg high m
- Linti1.: 00000000`000084ff Vec:FF NMI Dest=Self lvl high
- TMR: 63, 73, 83, 94, A4, B1, B4
- IRR: 41, B1, D1
- 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 常用命令详解的更多相关文章
- 【转载】windbg 常用命令详解
windbg 常用命令详解 https://blog.csdn.net/chenyujing1234/article/details/7743460 vertarget 显示当前进程的大致信息 lmv ...
- hbase shell基础和常用命令详解(转)
HBase shell的基本用法 hbase提供了一个shell的终端给用户交互.使用命令hbase shell进入命令界面.通过执行 help可以看到命令的帮助信息. 以网上的一个学生成绩表的例子来 ...
- samtools常用命令详解(转)
转自:samtools常用命令详解 samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和ba ...
- cisco常用命令详解
cisco常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用命令用法展示 1.命令行模式的来回切换 yinzhengjie>enable #从用户模式切换到 ...
- H3C常用命令详解
H3C常用命令详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.关闭后台日志输出 <yinzhengjie>sys [yinzhengjie]undo info- ...
- hbase shell基础和常用命令详解
HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服 ...
- Tmux 的常用命令详解
Tmux 的常用命令详解 常用命令: tmux #开启tmux tmux ls #显示已有tmux列表(C-b s) tmux attach-session -t 数字 #选择tmux C-b c ...
- Hexo系列(三) 常用命令详解
Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...
- DOS常用命令详解
DOS常用命令详解 dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘 edit ...
随机推荐
- 漂亮的表格样式–>使用CSS样式表控制表格样式
依照WEB2.0风格,设计了几个表格样式,希望大家喜欢.WEB2.0提倡使用div开布局,但不是要完全放弃使用表格,表格在数据展现方面还是不错的选择.现在介绍使用CSS样式表来控制.美化表格的方法. ...
- 给用户root权限
1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户#passwd tommy #passwd tommy //修改密 ...
- linux开机自检配置文件fstab变只读无法修改问题
控制linux开机自检的配置文件是/etc/fstab,在最近用的服务器中,发现fstab变成了只读权限,无法修改. 解决方法:RH5下,因磁盘改变,而导致系统停在Ctrl+d,此时需输入密码进入修改 ...
- UV mapping
[UV mapping] UV mapping is the 3D modeling process of making a 2D image representation of a 3D model ...
- 143. Reorder List(List)
Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do th ...
- MAC命令大全
OSX 的文件系统 OSX 采用的Unix文件系统,所有文件都挂在跟目录 / 下面,所以不在要有Windows 下的盘符概念. 你在桌面上看到的硬盘都挂在 /Volumes 下. 比如接上个叫做 ...
- 647. Palindromic Substrings 互文的子字符串
[抄题]: Given a string, your task is to count how many palindromic substrings in this string. The subs ...
- 不同Hadoop模式下,Hive元数据文件存储位置
假如在hive的配置文件hive-site.xml中,属性hive.metastore.warehouse.dir被设置为/root/hive/warehouse. 如果Hadoop是本地模式,则仓库 ...
- 兼容低于IE9不支持html5标签的元素的方法
方法一: <!--[if lt IE9]> <script> (function() { if (! /*@cc_on!@*/ 0) retur ...
- 解决Emoji存储MySQL报错问题
在解决之前,得先说明一下为什么会出现报错,Emoji表情占用4个字节,但是MySQL数据库UTF-8编码最多只能存储3个字节,就会导致存储不进去 如何解决Emoji存储问题 mysql 的 utf8编 ...