WinDBG常用命令

  1. 条件断点

条件断点:断点指令 + “j(Excecute If-Else) 和 gc (Go from Conditional Breakpoint)”
            形如:bp Address "j (Condition) 'OptionalCommands'; 'gc' "

a.普通变量(非结构体)

 "j (poi(MyVar)>5) '';'gc'"

 在代码中,MyVar是整数变量。默认的debug配置采用MASM语法,因此MyVar被当作指针看待,在做条件判断时,需要使用poi解引用。如果debug配置采用C++语法,MyVar会被解析为整数变量,可直接用于条件判断。条件为真时对应的语句为空,则当条件满足时,会断在此处。gc表示从断点处继续运行。

b.结构体变量

  "j (@@c++(MyStruct->field)>5) '';'gc'"

判断结构体变量中的某个成员变量时,采用C++语法解析表达式:@@c++(...)。因默认配置是masm语法,故对于结构体成员都用此种方法解析。

c.寄存器

 <1> "j @eax = 0xa3 ''; 'gc'"     

 <2> "j @eax = 0xc0004321 '';'gc'"   

 <3> "j (@eax & 0x0`ffffffff) = 0x0`c0004321 '';'gc'"

<1>当eax的值为0xa3时,触发该断点。
        在masm表达式中,寄存器是做符号扩展的,即0xc0004321实际被当作是0xffffffff`c0004321,即便实际显示时是0xc00004321。这种符号扩展仅存在于kernel mode中。因此式<2>在kernel mode会失败。最好的改法则是按照式<3>的方式做条件比较,该方式可以同时用于kernel mode和user mode。

 

你可能感兴趣的:(调试工具)