5min学会WinDBG条件断点

本文介绍了如何使用WinDBG设置条件断点,以深入分析Windows消息,特别是针对EM_GETTEXTRANGE消息的参数。通过设置断点在USER32!SendMessage函数上,并编写WinDBG脚本来过滤和输出特定消息的详细信息,可以方便地查看窗口句柄、消息值及其它参数。

1.前言

       很多时候我们可以使用Spy++查看某个窗口的消息,但是有一定的局限性。

       以编辑控件为例,我们打开Spy++截获应用程序的EM_GETTEXTRANGE消息,却只能看到TEXTRANGE结构的指针值,看不到结构的内容。

 

        如果想要详细查看消息的WPARAM和LPARAM参数,Spy++是无能为力的。

        但是可以通过WinDBG的条件断点却可以轻松实现。

        我们先从最简单的WinDBG断点开始,将断点打在USER32!SendMessage函数上,就可以看到应用程序传递了什么参数。

 

2.WinDBG断点

       首先,设置符号路径(假设放在本地的目录E:\symbols):

SRV*E:\symbols*http://msdl.microsoft.com/download/symbols

 

       然后,将WinDBG调试器附加到目标进程并且中断程序。

       接着,就可以打断点了。

bp USER32!SendMessageW

bp USER32!SendMe
WindbgWindows Debugger)是微软官方提供的一款强大的调试工具,主要用于分析和调试Windows系统下的应用程序。设置断点是调试过程中的重要步骤,它允许你在程序执行到特定行或代码块时暂停,以便查看和修改变量值、检查调用堆栈等。 以下是设置断点的基本步骤: 1. **打开Windbg**:首先,你需要打开Windbg,可以通过“开始”菜单搜索或直接运行`cdb.exe`(命令行版)或`windbg.exe`(图形界面版)。 2. **加载目标模块**:如果你知道要调试的应用程序的进程ID(PID)或进程名,使用`!process`命令加载它。例如:`.reload /f <进程名>` 或 `~pid <进程ID>`。 3. **找到源代码位置**:在加载了目标模块后,使用`lm`(list modules)命令查看模块信息,然后找到你想要设置断点的源代码行号,通常文件路径会出现在模块信息中。 4. **设置断点**:使用`bp`命令加上模块路径和行号,例如:`bp <模块路径>\function_name + line_number`。你也可以使用符号文件(.pdb)的相对路径来设置断点,如:`bp !function_name`。 5. **断点选项**:如果需要,你可以添加条件、步进等选项,例如设置只在满足某个条件时触发断点,用`b`命令后跟条件表达式,如 `b function_name(line_number) condition`。 6. **启动调试**:最后,启动你要调试的进程,Windbg会在设置的断点处停止程序执行。 相关问题: 1. Windbg除了断点还有哪些调试功能? 2. 如何在Windbg中单步执行代码? 3. 如何查看断点列表和管理已设置的断点?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值