SendMessage 异常捕获问题
来源:互联网 发布:c语言打开文件方式 编辑:程序博客网 时间:2024/05/23 15:55
最近为了解决一个第三方组件崩溃导致程序崩溃的问题,使用了捕获消息循环异常的方法,在验证时在sendmessage里面制造了崩溃现场,发现消息循环中使用的try_catch没有捕获到异常,但是程序也没有发生崩溃。换成postmessage异常可以正常捕获到。唯一合理的解释是,sendmessage调用内部捕获了异常,由于无法查看sendmessage的实现,只能查看汇编代码。最终的汇编调用如下:
_SendMessageW@16:
75F19679 mov edi,edi
75F1967B push ebp
75F1967C mov ebp,esp
75F1967E push esi
75F1967F mov esi,dword ptr [ebp+0Ch]
75F19682 test esi,0FFFE0000h
75F19688 jne _SendMessageW@16+11h (75F43C53h)
75F1968E mov ecx,dword ptr [ebp+8]
75F19691 cmp ecx,0FFFFFFFFh
75F19694 je _SendMessageW@16+49h (75F22CF8h)
75F1969A cmp ecx,0FFFFh
75F196A0 je _SendMessageW@16+49h (75F22CF8h)
75F196A6 call @ValidateHwnd@4 (75F16183h)
75F196AB mov ecx,eax
75F196AD or ecx,edx
75F196AF je _SendMessageW@16+18h (75F22CF1h)
75F196B5 push 0
75F196B7 push dword ptr [ebp+14h]
75F196BA push dword ptr [ebp+10h]
75F196BD push esi
75F196BE push edx
75F196BF push eax
75F196C0 call _SendMessageWorker@24 (75F1954Ch)
75F196C5 pop esi
75F196C6 pop ebp
75F196C7 ret 10h
75F196CA cmp edx,219h
75F196D0 ja 75F1D694
75F196D6 cmp edx,218h
75F196DC jae 75F3EE65
75F196E2 mov ecx,137h
75F196E7 cmp edx,ecx
75F196E9 jbe 75F23480
75F196EF mov ecx,edx
75F196F1 sub ecx,138h
75F196F7 jne 75F45279
75F196FD mov ecx,esi
75F196FF or ecx,dword ptr [ebp+0Ch]
75F19702 je 75F3F518
75F19708 test byte ptr [esi+2Dh],2
75F1970C je 75F3F518
75F19712 push 0Fh
75F19714 pop esi
75F19715 push 8
75F19717 pop edi
75F19718 push dword ptr [eax+esi*4+0ADCh]
75F1971F push dword ptr [ebp+14h]
75F19722 call dword ptr [__imp__SetBkColor@8 (75F102F0h)]
75F19728 mov eax,dword ptr [__except_list+98h (75F80138h)]
75F1972D push dword ptr [eax+edi*4+0ADCh]
75F19734 push dword ptr [ebp+14h]
75F19737 call dword ptr [__imp__SetTextColor@8 (75F102ECh)]
75F1973D mov eax,dword ptr [__except_list+98h (75F80138h)]
75F19742 mov eax,dword ptr [eax+esi*8+0B58h]
75F19749 jmp _RealDefWindowProcWorker@24+218h (75F16A56h)
75F1974E dec eax
75F1974F jne __GetWindow@12+47h (75F53A36h)
75F19755 mov esi,dword ptr [edi+60h]
75F19758 mov ebx,dword ptr [edi+64h]
75F1975B jmp __GetWindow@12+88h (75F1932Bh)
可以看到调用中存在这样一段代码
75F19728 mov eax,dword ptr [__except_list+98h (75F80138h)]
可见sendmessage与异常处理还是有些许关系。
- SendMessage 异常捕获问题
- 异常捕获的问题
- 异常捕获问题
- java异常捕获问题
- spring事务异常捕获问题
- 关于异常捕获的问题
- 内部异常捕获问题asp.net
- JS调用COM组件异常捕获问题
- 解决ANT无法捕获异常的问题
- SpringMVC上传文件过大,异常捕获问题。
- Java中的多异常捕获问题最后
- 异常捕获
- 捕获异常
- 异常捕获
- 捕获异常
- 异常捕获
- 异常捕获
- 捕获异常
- the Marvelous Land of Oz 49%
- 【竞品分析】腾讯QQ手机浏览器与UC手机浏览器产品对比
- hdu 1785 You Are All Excellent
- 剑指offer 3.4 代码的鲁棒性2- 反转链表
- js跨浏览器事件处理程序
- SendMessage 异常捕获问题
- 设计模式中的关系在代码中的实现
- IOS开发——Xcode控制台输出中文
- 选中的磁盘具有MBR分区表,在EFI系统上Windows只能安装到GPT磁盘的解决方法
- 动态实例化第三方控件
- Struts2_2_第一个Struts2的应用
- pimpl的理解
- 湖大训练赛8 Cracking the Safe(24点的游戏)
- spine IK and binary 运行库已经实现