学习使用常用的windbg命令(u、dt、ln、x)
2018-03-22 15:24
435 查看
目录:(1) u命令(反汇编)(2) dt命令(查看数据结构)(3) ln命令(查找就近的符号)(4) x命令(显示模块的符号)(5) k命令(显示调用栈)(6) d命令(以数据方式显示)(7) b命令(断点)(8) lm lmvm (显示模块信息)(9) .reload (重加载模块)(10) !process !thread .process .thread (查看进程线程信息)(11) !object (查看对象信息)(12) !devnode (查看设备对象)(13) g命令 (继续执行)(14) operators (MASM)(汇编下的操作符,poi,by,&等,条件断点最有用)(15) e命令 (写内存数据)(16) !ca命令 (查看session的ControlArea)(17) r命令 (查看修改寄存器) 详细(1)u命令(反汇编)uf ICSF!SfDirectoryControl可以查看整个函数的汇编代码u ICSF!SfDirectoryControl ICSF!SfDirectoryControl+0X30可以看到30个字节的汇编指令ub ICSF!SfDirectoryControl L30可以查看SfDirectoryControl 之上的30字节的汇编指令(2)dt命令(查看数据结构)dt nt!_IRP -r2
可以查看二级结构,从而知道IoGetCurrentIrpStackLocation宏实际取的是_IRP.Tail(0x040).Overlay(0x000).CurrentStackLocation(0x020)。也就是说,IRP+0X60里存放的就是_IO_STACK_LOCATION的地址。实例:dt nt!_IRP poi(ebp+0x0c) -r2 *注释:dispatch中,ebp+0ch存放的就是IRP参数的地址显示结果(省略一部分):+0x040 Tail : __unnamed
+0x000 Overlay : __unnamed
+0x000 DeviceQueueEntry : _KDEVICE_QUEUE_ENTRY
+0x000 DriverContext : [4] (null)
+0x010 Thread : 0x822934d8 _ETHREAD
+0x014 AuxiliaryBuffer : 0x8225bc30 "???"
+0x018 ListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x020 CurrentStackLocation : _IO_STACK_LOCATION
+0x020 PacketType : 0x822f29ac
+0x024 OriginalFileObject : 0x822ecde8 _FILE_OBJECT
然后,就可以得到irpSp的地址0x822f29ac了。(3)ln命令(查找就近的符号)0: kd> ln 804e23a2
(804e23a2) nt!IopfCallDriver | (804e2417) nt!KiInsertTimerTable
Exact matches:(4)x命令(显示模块的符号)x nt!*则显示nt的所有符号(5)k命令(显示调用栈)kd直接显示所有的栈情况kb显示前3个参数kp显示调用栈,及所有参数值和它们的类型kc只显示调用栈的模块名和地址(不显示调用栈的地址)(6)d命令(以数据方式显示)da显示ascii码dc按单字节显示字符db按单字节显示dd按4字节显示dD按8字节显示(64位下常用)df按浮点显示dp按4字节或者8字节显示(取决于是32位系统还是64位系统)dw按2字节显示dW按2字节显示字符dyb按二进制位显示(一字节一组)dyd按二进制位显示(4字节一组)(7)b命令(断点)bp 0040108cbp Myexe!main+5cbp source.c:31在指定地址下断点bp Myexe!main+5c "j 0!=eax 'dd @eax;gc';'gc'")下条件断点,如何写表达式可参考本博文的operators (MASM)bl显示所有断点bc 1bc 1-4bc *删除断点bd 1bd 1-4bd *使断点失效ba r4 DSPD!g_Global下硬件断点bu DSPD!DriverEntry下延迟断点(在驱动镜像加载时,下断点)bm DSPD!openf*下模糊断点(8)lm lmvm (显示模块信息)lm显示所有加载模块lmvm DSPrivateData64显示指定模块的详细信息 (9) .reload (重加载模块).reload DSPrivateData64.sys.reload /f /i DSPrivateData64.sys (/f强制加载, /i忽略pdb不匹配).reload /u DSPrivateData64.sys (卸载模块)(10) !process !thread .process .thread(查看进程线程信息)!process 0 0显示所有进程!process 0x843423 0显示进程信息.process 0x843423切换到指定进程.process /i 0x843423输入g命令后切换到指定进程.thread 0x87668432切换到指定线程!thread 0x87668432 0查看线程信息(11) !object (查看对象信息)!object \查看指定对象的信息(12) !devnode (查看设备对象)!devnode 0 1查看所有的设备对象(13) g命令 (继续执行)g 继续执行gu执行到本函数返回(14)operators(MASM)(汇编操作符,poi,by,&等,条件断点最有用)可查看windbg帮助的operators (MASM)poi(@ebp) 地址(ebp)指向的指针。在kernel调试下,是目标机环境。user调试下,是编译环境。by(0x8423D435) 地址指向的字节$vvalid(Address, Length)指定范围的内存是否有效& ! | 等,$scmp等(15)e命令 (写内存数据)eb 0x838de64c 1向指定地址内存按单字节写入ew (2字节)ed (4字节)ep (指针)eq (8字节) ea (ASCII字符串)eu (UNICODE字符串)eza (ASCII字符串,NULL结尾)ezu (UNICODE字符串,NULL结尾) (16) !ca命令 (查看section的ControlArea)kd> !ca ff8636e8
ControlArea @ff8636e8
Segment: e1b74548 Flink 0 Blink: 0
Section Ref 0 Pfn Ref 6c Mapped Views: 1
User Ref 1 Subsections 5 Flush Count: 0
File Object ff86df88 ModWriteCount 0 System Views: 0
WaitForDel 0 Paged Usage 380 NonPaged Usage e0
Flags (10000a0) Image File HadUserReference (17) r命令 (查看修改寄存器)kd>reaxeax=00000000查看寄存器,也可以用,r@eax等kd>reax=1eax=00000001设置寄存器的值常在断点中使用,比如kd> bp vDiskBus!InitManager+0xb3 " r@eax=0;gc"
可以查看二级结构,从而知道IoGetCurrentIrpStackLocation宏实际取的是_IRP.Tail(0x040).Overlay(0x000).CurrentStackLocation(0x020)。也就是说,IRP+0X60里存放的就是_IO_STACK_LOCATION的地址。实例:dt nt!_IRP poi(ebp+0x0c) -r2 *注释:dispatch中,ebp+0ch存放的就是IRP参数的地址显示结果(省略一部分):+0x040 Tail : __unnamed
+0x000 Overlay : __unnamed
+0x000 DeviceQueueEntry : _KDEVICE_QUEUE_ENTRY
+0x000 DriverContext : [4] (null)
+0x010 Thread : 0x822934d8 _ETHREAD
+0x014 AuxiliaryBuffer : 0x8225bc30 "???"
+0x018 ListEntry : _LIST_ENTRY [ 0x0 - 0x0 ]
+0x020 CurrentStackLocation : _IO_STACK_LOCATION
+0x020 PacketType : 0x822f29ac
+0x024 OriginalFileObject : 0x822ecde8 _FILE_OBJECT
然后,就可以得到irpSp的地址0x822f29ac了。(3)ln命令(查找就近的符号)0: kd> ln 804e23a2
(804e23a2) nt!IopfCallDriver | (804e2417) nt!KiInsertTimerTable
Exact matches:(4)x命令(显示模块的符号)x nt!*则显示nt的所有符号(5)k命令(显示调用栈)kd直接显示所有的栈情况kb显示前3个参数kp显示调用栈,及所有参数值和它们的类型kc只显示调用栈的模块名和地址(不显示调用栈的地址)(6)d命令(以数据方式显示)da显示ascii码dc按单字节显示字符db按单字节显示dd按4字节显示dD按8字节显示(64位下常用)df按浮点显示dp按4字节或者8字节显示(取决于是32位系统还是64位系统)dw按2字节显示dW按2字节显示字符dyb按二进制位显示(一字节一组)dyd按二进制位显示(4字节一组)(7)b命令(断点)bp 0040108cbp Myexe!main+5cbp source.c:31在指定地址下断点bp Myexe!main+5c "j 0!=eax 'dd @eax;gc';'gc'")下条件断点,如何写表达式可参考本博文的operators (MASM)bl显示所有断点bc 1bc 1-4bc *删除断点bd 1bd 1-4bd *使断点失效ba r4 DSPD!g_Global下硬件断点bu DSPD!DriverEntry下延迟断点(在驱动镜像加载时,下断点)bm DSPD!openf*下模糊断点(8)lm lmvm (显示模块信息)lm显示所有加载模块lmvm DSPrivateData64显示指定模块的详细信息 (9) .reload (重加载模块).reload DSPrivateData64.sys.reload /f /i DSPrivateData64.sys (/f强制加载, /i忽略pdb不匹配).reload /u DSPrivateData64.sys (卸载模块)(10) !process !thread .process .thread(查看进程线程信息)!process 0 0显示所有进程!process 0x843423 0显示进程信息.process 0x843423切换到指定进程.process /i 0x843423输入g命令后切换到指定进程.thread 0x87668432切换到指定线程!thread 0x87668432 0查看线程信息(11) !object (查看对象信息)!object \查看指定对象的信息(12) !devnode (查看设备对象)!devnode 0 1查看所有的设备对象(13) g命令 (继续执行)g 继续执行gu执行到本函数返回(14)operators(MASM)(汇编操作符,poi,by,&等,条件断点最有用)可查看windbg帮助的operators (MASM)poi(@ebp) 地址(ebp)指向的指针。在kernel调试下,是目标机环境。user调试下,是编译环境。by(0x8423D435) 地址指向的字节$vvalid(Address, Length)指定范围的内存是否有效& ! | 等,$scmp等(15)e命令 (写内存数据)eb 0x838de64c 1向指定地址内存按单字节写入ew (2字节)ed (4字节)ep (指针)eq (8字节) ea (ASCII字符串)eu (UNICODE字符串)eza (ASCII字符串,NULL结尾)ezu (UNICODE字符串,NULL结尾) (16) !ca命令 (查看section的ControlArea)kd> !ca ff8636e8
ControlArea @ff8636e8
Segment: e1b74548 Flink 0 Blink: 0
Section Ref 0 Pfn Ref 6c Mapped Views: 1
User Ref 1 Subsections 5 Flush Count: 0
File Object ff86df88 ModWriteCount 0 System Views: 0
WaitForDel 0 Paged Usage 380 NonPaged Usage e0
Flags (10000a0) Image File HadUserReference (17) r命令 (查看修改寄存器)kd>reaxeax=00000000查看寄存器,也可以用,r@eax等kd>reax=1eax=00000001设置寄存器的值常在断点中使用,比如kd> bp vDiskBus!InitManager+0xb3 " r@eax=0;gc"
相关文章推荐
- 学习使用常用的windbg命令(u、dt、ln、x)
- 学习使用常用的windbg命令(u、dt、ln、x)
- 学习使用常用的windbg命令(u、dt、ln、x)
- 整理一些平时调试.NET Application使用WinDbg + SOS的常用命令
- *Linux常用命令学习1---(安装、文件系统、目录操作命令cd ls mv cp rm mkdir、链接命令ln……)
- Linux常用操作命令学习使用实时记录
- windbg学习进阶之——dump分析常用命令收集
- windbg 常用命令使用
- Windbg命令学习13(ln和伪寄存器)
- 高效使用Vim编辑器--Vim编辑器常用命令学习笔记
- [Linux学习笔记] Linux常用命令 - 番外篇(Shell使用技巧)
- PostgreSql 学习笔记一 CentOS下安装使用 及常用命令
- linux学习使用总结-linux系统的安装和与windows双系统共享,linux常用的基本命令,今天贴在这里和大家分享
- Windbg使用指南(1)---常用命令
- Red Hat linux 6.5 学习使用笔记《一》linux系统常用命令
- Ubuntu的常用命令学习积累及使用说明(更新中)
- c/c++unix/linux基础学习笔记-常用命令和vi的使用
- Oracle学习(8)--Linux系统的VI编辑器常用命令、linux中使用ftp上传文件
- Windbg使用指南(1)---常用命令
- Windbg 的使用和常用命令