Я отлаживаю приложение в точке, где оно использует диалоговое окно для получения некоторой информации от пользователя, а затем выполняет некоторую обработку этой информации.Установив точку останова на 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) ''; 'gc' ".Первоначально это принимается, но когда оценивается точка останова, он жалуется: в '& dwo (esp + 12) == 0x1)' 'отсутствует числовое выражение;'gc' '
Окружение двух выражений с помощью () не помогло.Я посмотрел файл справки, но, честно говоря, это смущает меня еще больше.Я довольно новичок в WinDbg и английский не мой родной язык.Может кто-нибудь указать мне правильное направление?
Заранее спасибо.
PS: Это 32-разрядное приложение, для которого у меня нет исходного кода.