您的位置:首页 > 其它

学习使用常用的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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: