Условная точка останова, которая проверяет несколько переменных стека

StackOverflow https://stackoverflow.com/questions/6097157

Вопрос

Я отлаживаю приложение на этапе, когда оно использует диалоговое окно для получения некоторой информации от пользователя, а затем выполняет некоторую обработку этой информации.Установив точку останова в USER32!CreateDialogParamW, я нашел адрес его диалоговой процедуры.

Сначала я просто хотел прервать работу, когда процедура получит сообщение WM_COMMAND, поэтому я использовал следующую команду:bp 00cfa1c0 "j (dwo(esp+8) == 0x111)";"gc""

К сожалению, этого недостаточно, поскольку диалоговая процедура по какой-то причине получает сообщения WM_COMMAND даже при нажатии ALT-TABbing между WinDbg и приложением.Итак, теперь я хочу, чтобы он прерывался, когда он получает WM_COMMAND с кодом уведомления BN_CLICKED от кнопки OK в диалоговом окне.Идентификатор элемента управления кнопки в шаблоне диалогового окна равен 1, а BN_CLICKED определяется как 0 в winuser.h.Это означает, что аргумент WPARAM диалоговой процедуры должен быть равен 1 при нажатии кнопки OK.

Я попробовал следующую команду:bp 00cfa1c0 "j (dwo(esp+8) == 0x111 && dwo(esp+ 12) == 0x1)";"гк"".Изначально это принимается, но при оценке точки останова она выдает ошибку:Числовое выражение отсутствует в '& dwo(esp+12) == 0x1) ";"гк"

Окружение 2 выражений с помощью () 's не помогло.Я просмотрел файл справки, но, честно говоря, это смущает меня еще больше.Я довольно новичок в WinDbg, и английский не является моим родным языком.Кто-нибудь может указать мне правильное направление?

Заранее благодарю.

PS:Это 32-разрядное приложение, для которого у меня нет исходного кода.

Это было полезно?

Решение

Используйте один & - синтаксисом по умолчанию для выражений является MASM. && является частью синтаксиса C ++.

Следующие выражения будут работать для вас:

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

или

@@c++(*(int*)(@esp+8) == 0x111 && *(int*)(@esp+12) == 0x1)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top