2011-05-23 36 views
3

我在使用對話框從用戶獲取某些信息的位置調試應用程序,然後對該信息執行一些處理。通過在USER32上設置一個斷點!CreateDialogParamW我找到了它的對話過程的地址。測試多個堆棧變量的條件斷點

起初我只想當程序接收WM_COMMAND消息斷裂,所以就用下面的命令:bp的00cfa1c0 「Ĵ(DWO(ESP + 8)== 0x111) ''; 'GC'」

這不幸是不夠的,因爲即使在WinDbg和應用程序之間進行ALT-TABBING時,出於某種原因,對話過程也會收到WM_COMMAND消息。所以,現在我希望它在它從對話框上的OK按鈕收到帶有BN_CLICKED的通知代碼的WM_COMMAND時斷開。對話框模板中按鈕的控件ID是1,在winuser.h中將BN_CLICKED定義爲0。這意味着點擊OK按鈕時對話框程序的WPARAM參數應爲1。

我試過了以下命令:bp 00cfa1c0「j(dwo(esp + 8)== 0x111 & & dwo(esp + 12)== 0x1)'';'gc'」。這是最初被接受的,但是當評估斷點時,它會抱怨:'& dwo(esp + 12)== 0x1)'缺少數字表達式; 'gc''

用()括起來的2個表達式並沒有幫助。我看了幫助文件,但說實話,讓我更加困惑。我對WinDbg相當陌生,英文不是我的母語。有人能指引我朝着正確的方向嗎?

在此先感謝。

PS:這是一個32位應用程序,我沒有源代碼。

回答

4

使用單個& - 表達式的默認語法是MASM。 &&是C++語法的一部分。

下面的表達式,你會工作:

(dwo(@esp+8) == 0x111 & dwo(@esp+12) == 0x1) 

@@c++(*(int*)(@esp+8) == 0x111 && *(int*)(@esp+12) == 0x1)