Windbg 命令 (四)

编程入门 行业动态 更新时间:2024-10-07 12:21:48

Windbg <a href=https://www.elefans.com/category/jswz/34/1771323.html style=命令 (四)"/>

Windbg 命令 (四)

断言处理 ah

ahb [Address]    // 指定地址的断言如果失败则中断调试器
ahi [Address]    // 忽略指定地址断言的失败
ahd [Address]    // 删除指定地址的断言信息
ahc              // 删除进程的断言信息 
ah               // 显示当前的断言处理设置

对于断言也是系统的一个exception(STATUS_ASSERTION_EXCEPTION)。因此该命令只是设置指定位置断言的处理状态。而sx* asrt命令可以设置全局的断言处理状态。

访问断点 ba

访问断点有些地方也被称为数据断点。创建一个处理器断点,会在访问指定地址时中断。

ba[ID] Access Size [Options] [Address [Passes]] ["CommandString"]// example
ba w 4 0xfffff80f`af0f0000 "k"

上面的例子就是给地址0xfffff80f`af0f0000处设置断点,当对这个地址进行写访问的时候就会执行k命令。

除了w写可以设置,e执行,r读,i I/O端口断点。Size代表需要monitor的内存长度,只能是1,2,4,8。

如果是用户态调试还能指定只给某个线程设置断点。

断点系列命令 bp, bm, bu, bs, bsc, br, bl, be, bd, bc

// 给指定指令地址设置断点
bp[ID] [Options] [Address [Passes]] ["CommandString"] // 给指定地址设置断点,允许当前module symbol不存在
bu[ID] [Options] [Address [Passes]] ["CommandString"] // 允许使用通配符*来批量设置断点。
bm [Options] SymbolPattern [Passes] ["CommandString"]// 列出当前存在的断点
bl [/L] [Breakpoints]// Disable断点
bd Breakpoints// Enable断点
be Breakpoints// 删除断点
bc Breakpoints// 给指定断点重新编号
br OldID NewID [OldID2 NewID2 ...] // 更新指定断点所指定的命令
bs ID ["CommandString"]// 更新指定条件断点的条件和命令
bsc ID Condition ["CommandString"]

对于windbg里面所操作的断点都是采用ID来编号,例如

0:007> bl0 e Disable Clear  00007ff8`093e52f0     0001 (0001)  0:**** ntdll!RtlInitAnsiString1 e Disable Clear  00007ff8`094e30f0     0001 (0001)  0:**** ntdll!RtlSetTimer2 e Disable Clear  00007ff8`094ee420     0001 (0001)  0:**** ntdll!RtlNtdllName

一旦通过bp等命令设置断点之后,可以使用be, bd, bc等命令来通过对应的ID来操作。

断点地址也可以指定为。bl命令会把所有命令都列出来,但是不会表明断点的类型,需要使用.bpcmds命令来显示每个断点的类型

0:007> .bpcmds
bp0 0x00007ff8`093e52f0 ;
bp1 0x00007ff8`094e30f0 ;
bp2 0x00007ff8`094ee420 ;
bu4 @!"ntdll!fltused";

对比内存 c

c Range Address// 例子
0:007> c 0x00007ff8`094ee426 L3 0x00007ff8`094ee42a
00007ff8`094ee426  00 - 00007ff8`094ee42a  1a
00007ff8`094ee428  18 - 00007ff8`094ee42c  00

可以对比两端内存的差异,并列列出不同的内容。如例中所示其中长度指定的3,但是输出只列出了两个有差异的字节。

显示内存 d, da, db, dc, dd, dD, df, dp, dq, du, dw, ds, dS, 

d{a|b|c|d|D|f|p|q|u|w|W} [Options] [Range] 
dy{b|d} [Options] [Range] 
d [Options] [Range] 

这一系列命令都可以看作d+显示格式。其中又能分为两类,以不同格式显示binary内容和显示显示成字符或者字符串内容。du, da, ds, dS就能够显示字符和字符串内容。需要注意的是ds和dS现实的是结构体STRING, ANSI_STRING, or UNICODE_STRING。而单纯显示字符串则使用du,da。

0:007> da 00007ff8`094ee430
00007ff8`094ee430  "HDP..."
0:007> dd 00007ff8`094ee430
00007ff8`094ee430  09504448 00007ff8 00480046 00000000
// ds,dS如果接受的不是一个正确的结构体,则会显示异常
0:007> ds 00007ff8`094ee430
00000000`00480046  "????????????????????????????????"

显示指针指向的内容 dda, ddp, ddu, dpa, dpp, dpu, dqa, dqp, dqu

针对一些指针数组之类的场景,我们希望批量显示指针指向的内容,而不是指针本身的值。这时候就需要使用dd*和dp系列的命令。先看例子

0:007> da 0x000000f8`0d1ffb78
000000f8`0d1ffb78  ".&B..."
0:007> dpa 0x000000f8`0d1ffb78
000000f8`0d1ffb78  00007ff8`094226a1 ". H..I....Q)."
0:007> da 0x00007ff8`094226a1
00007ff8`094226a1  ". H..I....Q)."

如例子所示,dpa将指定的地址当作一个指针加以解释,并且将其按照asiic字符进行显示。当然其效果也等于第三个命令,直接指定指针中的地址。

更多推荐

Windbg 命令 (四)

本文发布于:2024-02-07 06:59:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753769.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令   Windbg

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!