欢迎光临 高端调试
登录
|
注册
|
FAQ
搜索论坛
内核调试
ACPI调试
Linux内核调试
Windows内核调试
调试方法学
调试战役
调试原理
新工具观察
操作系统
Linux
Windows Vista
Windows
驱动开发
Linux驱动
WDF
WDM
总线
PCI Express
PCI/PCI-X
USB
无线通信协议
中央处理器
64位CPU
ARM
IA-32
CPU Info Center
计算机机系统
ACPI标准
系统认证
Desktop
服务器
嵌入式系统
Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
特别链接
格蠹调试套件(GDK)
格蠹学院
小朱书店
老雷的微博
《软件调试》
《格蠹汇编》
《软件调试(第二版)》
沪ICP备11027180号-1
Windows内核调试
帖子发起人:
学习
发起时间:
2009-02-03 17:04 下午
回复:
7
高端调试
»
软件调试
»
Windows内核调试
»
windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
搜索论坛
帖子排序:
Oldest to newest
Newest to oldest
2009-02-03, 17:04 下午
学习
注册: 2009-02-03
发 贴: 6
windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
谢谢各位!
IP 地址: 已记录
报告
2009-02-04, 13:51 下午
学习
注册: 2009-02-03
发 贴: 6
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
咋没人理俺呀?
IP 地址: 已记录
报告
2009-02-04, 23:32 下午
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
HWND就是一个整型,dd就可以显示它的值了。
窗口过程有很多,看你想调试哪个?
如果是系统默认的窗口类,其窗口函数是USER32!DefWindowProcA
如果是对话框,其窗口函数是USER32!DefDlgProcA
对于MFC程序,MFC的默认窗口过程是MFC42D!CWnd::WindowProc
如果是程序员自己注册的窗口类,那么窗口函数是注册时登记的
如果你只是跟踪MFC程序中对某个消息事件的处理方法,那么就对OnXXX设置断点。
BTW,如果希望得到答案更快速和精确,那么最好把问题描述的详细些,比如你是想解决什么样的问题呢?不会是想考考高网的水平吧?^_^
IP 地址: 已记录
报告
2009-02-05, 09:11 上午
学习
注册: 2009-02-03
发 贴: 6
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
:),谢谢张老师的回答。
俺不是考查高网的水平,但俺的问题也不至于那么菜呀。
第一个问题:
HWND是四个字节的数值,但通过这个整数如何获取窗口的各种属性呢?比如显示、大小、ID、Parent、PID、TID等等等等。
如同HOBJECT,对应着一个GDITableEntry一样,通过HOBJECT可以了解更多的信息。
在使用windbg查找解决应用层问题的时候,往往现场很难重现,或者重现后界面已经不可见,根据堆栈,了解某些HWND的各种属性对解决问题很重要,从HWND如何了解这些就成了比较关键的手段。在windows2000上,windbg带了一个gdi的命令库,但xp以后版本中没有了。
如何去做?
HWND应该也对应着一个数据结构吧,却没有搜索到相关资料,即使MS不公开HWND的资料,也应该有人研究一把的呀。
第二个问题:
对一个标准windows窗口,她的默认窗口过程被SetWindowLongPtr修改后,那些SendMessage造成的直接窗口过程调用是应该在DefWindowProc之前的吧,如果没有第三方的符号库,如何在这个窗口过程的某个条件上断下来?
IP 地址: 已记录
报告
2009-02-05, 12:59 下午
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
这样的问题就make much more sense
对于问题1,是希望得到下面这样的信息吧?
Window 00400e7a
Name HeapMfc
Class #32770
WndProc 00000000
Style WS_SYSMENU WS_DLGFRAME WS_BORDER WS_CLIPSIBLINGS WS_VISIBLE WS_POPUP
ExStyle WS_EX_DLGMODALFRAME WS_EX_WINDOWEDGE WS_EX_LEFT WS_EX_LTRREADING WS_EX_RIGHTSCROLLBAR WS_EX_CONTROLPARENT WS_EX_APPWINDOW
HInstance 00400000
ParentWnd 00000000
Id 00000000
UserData 00000000
Unicode FALSE
ThreadId 000006c4
ProcessId 0000163c
那可以使用Skywing编写的扩展模块,模块名叫sdbgext.dll,上面的结果就是用它得到的:
0:001> !sdbgext.hwnd 0x00400e7a
对于第二个问题,可以先读出设置的新过程的地址(相当于GetWindowLongPtr)是什么,然后对其设置条件断点。
IP 地址: 已记录
报告
2009-02-05, 13:34 下午
学习
注册: 2009-02-03
发 贴: 6
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
哈,谢谢张老师,看来俺这次的描述让大家理解了。
都怪俺孤陋寡闻,现在才知道有sdbgext扩展,还没有用过她。
怕各位笑话,不敢再问这个模块怎样能获得了,自己搜搜了。
第一个问题正如你所说的。需要得到这样信息。看你贴的例子里面,对应HWND,咋没有其Position和Rect信息呀。
第二个问题的解决方案中牵出俺不会的另一个问题:.call指令调用GetWindowLongPtr如何传参数?
IP 地址: 已记录
报告
2009-02-05, 16:00 下午
学习
注册: 2009-02-03
发 贴: 6
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
还有,看了sdbgext的源码,对hwnd命令,里面采用的GetWindowLongPtr获取各种属性,但独有WndProc不能取到,而spy++则可以取到,貌似MS的spy++也是用GetWindowLongPtr获取的呀,难道spy++用的其他方式?
我原以为sdbgext源码里面会列出HWND与内核中未公开数据结构那个对应关系。:(
IP 地址: 已记录
报告
2009-02-05, 16:13 下午
学习
注册: 2009-02-03
发 贴: 6
Re: windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
还有,这个扩展很好,但不足之处在于,命令对应完全转储的dmp则不能使用。
比如一个最简单的例子就是,我想知道某个转储中的窗口的位置是不是跑到了九霄云外。
如果能从内存数据中分析就好了。
IP 地址: 已记录
报告
高端调试
»
软件调试
»
Windows内核调试
»
windbg如何查看HWND的数据结构?如何在窗口过程上下断点?
请选择
论坛首页
|- 论坛搜索
|- 热门主题
|- 未回复的主题
用户选项
|- 登录
|- 注册
|- 找回密码
软件调试
|- Windows内核调试
|- C/C++本地代码调试
|- .Net程序调试
|- 脚本程序调试
|- Java程序调试
|- Linux内核调试
|- 《程序员》杂志调试专栏
|- WinDbg
|- GDB
|- 远程调试
|- 调试ACPI和BIOS
|- 特殊的调试任务
|- 转储分析
|- GDK7
内核探秘
|- Windows内核
|- Linux内核
系统架构
|- CPU架构
|- PCI/PCI Express架构
程序人生
|- 软件物语
|- 社区活动
|- 名人逸事
联盟论坛
|- 欢迎使用CnForums
没有银弹
|- BUG也精彩
|- 豆腐工程
|- 软件圈里十大怪
Windows Vista
|- 用调试利剑剖析VISTA内幕
|- 老专家如何破解新问题
|- 我的电脑谁说了算?
|- 资源
Office开发
|- Visio
驱动程序开发
|- Windows驱动开发
|- Linux驱动开发
|- Windows CE驱动开发
用户态开发
|- Windows本地代码(native)高级开发
|- Web应用开发
|- WinFX和.Net
|- Office开发
本站建设
|- 高端调试团队
|- 版面布局
|- 活动建议
|- 网站维护
64位计算
|- 64-bit Windows
|- 64-bit CPU
图书
|- 《软件调试》的示例程序
|- 《软件调试》的工具
|- 《软件调试》书友
|- 《软件调试》答疑
|- 《软件调试》勘误和意见
|- 《格蠹汇编》
|- 《软件调试》第二版卷1
|- 《软件调试》第二版卷2
云计算
|- IaaS
|- 云存储
|- 大数据
|- PaaS和SaaS
GPU
|- CUDA
|- OpenCL
|- HSA
|- 游戏开发与调试
(C)2004-2020 ADVDBG.ORG All Rights Reserved.