如果你知道永遠不會有一個以上的「孩子」 ba
斷點定義,你可以實際使用由「控制」斷點的命令設置爲@$bpN
僞寄存器:
ba1 w4 /1 @esp+4 "dd @$bp1"
也就是說,指定斷點數量,這一新的斷點應該被分配,併爲斷點僞寄存器的定義仍然w^ithin斷點的命令。但是,如果您認爲控制斷點將被多次命中,並且想要定義多個ba
斷點,那顯然將不起作用,因爲每次只會重新定義「斷點1」。但你仍然可以做到!
訣竅是使控制斷點的命令實際上包含文字地址文本,而不是嘗試通過僞寄存器。你可以用文本別名來做到這一點。
試試這個您控制斷點:
bu @WHATEVER "aS /x ${/v:baaddy} @esp+4; .block{ ba w4 /1 baaddy \"dd baaddy\"; ad ${/v:baaddy} }"
如果控制斷點時,會發生以下情況:
- 別名是設置爲文本「baaddy」與值評估表達
@esp+4
。
.block
確保別名擴展發生在接下來的內容上。
- 除了
ad
命令(由於/ v開關)之外,別名解釋程序將擴展該塊內的所有「baaddy」。
- 所以如果
@esp+4
值是0x1234
訪問斷點命令從字面上就變成了:ba w4 /1 0x1234 \"dd 0x1234\"
內嵌有實際地址。
- 然後刪除文本別名。
它刪除在年底這個控制斷點時,下一次的文字別名或非常重要,別名擴展aS
命令和「baaddy」之前會發生將使用以前擴大值。這也意味着在第一次設置控制斷點的命令時,該文本 別名不存在很重要。
如果'your-address'斷點被命中了兩次(在'your-other-address'命中之前),這是否會改變$ t1的值並導致兩個一次斷點都爲dd @ $ t1在同一個地址? 謝謝! – IFacer 2009-12-22 15:45:04
在這種情況下,請將斷點保持在最小值。知道你有'你的地址',它也可以重置所有其他bps。在條件中使用類似'bc1-10'的東西(假設'your-address'位於bp0!)來擺脫最後10個尚未命中的斷點。 – deemok 2009-12-23 09:28:50
或者,您可以將$ t1設置爲0(以確保; o)並將其重置爲0,即單次bp。然後簡單地測試0(或其他值),並且只有在滿足某個條件(比如0)時才創建一個新的單發bp。 – deemok 2009-12-23 09:30:45