天天看點

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。

繼續閱讀