gpt4 book ai didi

stack - 测试多个堆栈变量的条件断点

转载 作者:行者123 更新时间:2023-12-01 13:00:46 25 4
gpt4 key购买 nike

我正在调试一个应用程序,它使用对话框从用户那里获取一些信息,然后对该信息进行一些处理。通过在 USER32!CreateDialogParamW 上设置断点,我找到了它的对话过程的地址。

起初我只是想在程序收到 WM_COMMAND 消息时中断,所以我使用了以下命令:bp 00cfa1c0 "j (dwo(esp+8) == 0x111) ''; 'gc'"

不幸的是,这还不够,因为即使在 WinDbg 和应用程序之间按 ALT-TAB 键时,由于某种原因,对话过程也会收到 WM_COMMAND 消息。所以,现在我希望它在从对话框上的“确定”按钮收到带有 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 位应用程序,我没有源代码。

最佳答案

使用单个 & - 表达式的默认语法是 MASM。 && 是 C++ 语法的一部分。

以下表达式适合您:

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

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

关于stack - 测试多个堆栈变量的条件断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6097157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com