Question

Je suis le débogage d'une application à un point où il utilise une boîte de dialogue pour obtenir certaines informations de l'utilisateur, puis fait un peu de traitement de cette information.En définissant un point d'arrêt sur USER32!CreateDialogParamW j'ai trouvé l'adresse de son dialogue intérieur.

Au début, j'ai voulu rompre lorsque la procédure reçoit un message WM_COMMAND, j'ai donc utilisé la commande suivante:bp 00cfa1c0 "j (dwo(esp+8) == 0x111) ";'gc'"

Ce n'est malheureusement pas assez que la procédure de dialogue pour une raison quelconque reçoit des messages WM_COMMAND même lorsque le ALT-Tab entre WinDbg et de la demande.Donc, maintenant, je veux la rupture quand il reçoit WM_COMMAND avec un code de notification de BN_CLICKED de la sur le bouton OK de la boîte de dialogue.L'ID de contrôle de bouton dans le modèle de boîte de dialogue est 1, et BN_CLICKED est définie comme 0 dans winuser.h.Cela signifie que l'argument WPARAM de la procédure de dialogue devrait être de 1 en cliquant sur le bouton OK.

J'ai essayé la commande suivante:bp 00cfa1c0 "j (dwo(esp+8) == 0x111 && dwo(esp+12) == 0x1) ";'gc'".C'est d'abord accepté, mais lorsque le point d'arrêt est évalué, il se plaint:Expression numérique manquant de " & dwo(esp+12) == 0x1) ";'gc"

Environnant les 2 expressions de ()'s n'a pas aidé.J'ai eu un coup d'oeil au fichier d'aide, mais pour être honnête, qui me confond encore plus.Je suis assez nouveau à WinDbg et l'anglais n'est pas ma langue maternelle.Quelqu'un peut me pointer dans la bonne direction?

Merci à l'avance.

PS:C'est une application 32 bits pour laquelle je n'ai pas le code source.

Était-ce utile?

La solution

Utiliser un seul & - la syntaxe par défaut pour les expressions, MASM. && fait partie de la syntaxe C++.

Les expressions suivantes serait travailler pour vous:

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

ou

@@c++(*(int*)(@esp+8) == 0x111 && *(int*)(@esp+12) == 0x1)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top