当前位置: 首页 > news >正文

网站开发在无形资产中设计素材网站图案免费

网站开发在无形资产中,设计素材网站图案免费,邢台市建设局培训中心网站,最新网络舆情一#xff1a;背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题#xff0c;回过头来看这个案例比较经典#xff0c;这篇稍微整理一下供后来者少踩坑吧。 二#xff1a;WinDbg 分析 1. 为什么会卡死 因为是窗体程序#xff0c;理所当然就是看主…一背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题回过头来看这个案例比较经典这篇稍微整理一下供后来者少踩坑吧。 二WinDbg 分析 1. 为什么会卡死 因为是窗体程序理所当然就是看主线程此时正在做什么? 可以用 ~0s ; k 看一下便知。 0:000 k# ChildEBP RetAddr 00 00aff168 75e3bb0a win32u!NtUserPeekMessage0xc 01 00aff168 75e3ba7e USER32!_PeekMessage0x2a 02 00aff1a4 6a5d711c USER32!PeekMessageW0x16e 03 00aff1f0 6a5841a6 System_Windows_Forms_ni0x23711c ... 17 00afffbc 00000000 ntdll!_RtlUserThreadStart0x1b 从线程栈来看当前的方法卡在 win32u!NtUserPeekMessage 上, 熟悉 Windows 窗体消息的朋友都知道这是提取 消息队列 的常规逻辑这个方法的下一步就是通过 Wow64SystemServiceCall 进入到 Windows内核态可以用 u 命令验证一下。 0:000 ub win32u!NtUserPeekMessage0xc 761d1010 b801100000 mov eax,1001h 761d1015 ba10631d76 mov edx,offset win32u!Wow64SystemServiceCall (761d6310) 761d101a ffd2 call edx 朋友也给我截了图确实出现了卡死那接下来的问题就是看下当前线程在 内核态 到底在做什么 2. 真的卡在内核态吗 幸好朋友可以在卡死的机器上安装 windbg让朋友在卡死的时候使用 Attch to kernel 的方式观察内核态截图如下 附加成功后可以用 !process 0 f xxxx.exe 看到主线程的线程栈。 lkd !process 0 f xxxx.exe PROCESS ffffab8ebea75080SessionId: 1 Cid: 0f78 Peb: 009f1000 ParentCid: 1134...THREAD ffffab8ecad14540 Cid 0f78.38f8 Teb: 00000000009f3000 Win32Thread: ffffab8ecd5dabc0 WAIT: (WrUserRequest) UserMode Non-Alertableffffab8ecb31bcc0 QueueObjectIRP List:ffffab8ecad82b20: (0006,0478) Flags: 00060000 Mdl: 00000000Not impersonatingDeviceMap ffffd400aa7eed50Owning Process ffffab8ebea75080 Image: xxxx.exeAttached Process N/A Image: N/AWait Start TickCount 1117311 Ticks: 9265 (0:00:02:24.765)Context Switch Count 60628 IdealProcessor: 2 NoStackSwapUserTime 00:00:10.796KernelTime 00:00:06.593Win32 Start Address 0x00000000006e16aaStack Init ffffa88b5b18fb90 Current ffffa88b5b18e780Base ffffa88b5b190000 Limit ffffa88b5b189000 Call 0000000000000000Priority 10 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5Child-SP RetAddr Call Siteffffa88b5b18e7c0 fffff8066627e370 nt!KiSwapContext0x76ffffa88b5b18e900 fffff8066627d89f nt!KiSwapThread0x500ffffa88b5b18e9b0 fffff8066627d143 nt!KiCommitThreadWait0x14fffffa88b5b18ea50 fffff8066628679b nt!KeWaitForSingleObject0x233ffffa88b5b18eb40 ffffa9d4bdd32b12 nt!KeWaitForMultipleObjects0x45bffffa88b5b18ec50 ffffa9d4bdd352d9 win32kfull!xxxRealSleepThread0x362ffffa88b5b18ed70 ffffa9d4bdd33f8a win32kfull!xxxInterSendMsgEx0xdd9ffffa88b5b18eee0 ffffa9d4bdd37870 win32kfull!xxxSendTransformableMessageTimeout0x3eaffffa88b5b18f030 ffffa9d4bdf1e088 win32kfull!xxxSendMessage0x2cffffa88b5b18f090 ffffa9d4bdf1e0e9 win32kfull!xxxCompositedTraverse0x40ffffa88b5b18f0e0 ffffa9d4bdf1e0e9 win32kfull!xxxCompositedTraverse0xa1ffffa88b5b18f130 ffffa9d4bdf1e0e9 win32kfull!xxxCompositedTraverse0xa1ffffa88b5b18f180 ffffa9d4bdf1e0e9 win32kfull!xxxCompositedTraverse0xa1ffffa88b5b18f1d0 ffffa9d4bdf1e2a7 win32kfull!xxxCompositedTraverse0xa1ffffa88b5b18f220 ffffa9d4bde5a013 win32kfull!xxxCompositedPaint0x37ffffa88b5b18f2b0 ffffa9d4bdd2e438 win32kfull!xxxInternalDoPaint0x12bce3ffffa88b5b18f300 ffffa9d4bdd2e03a win32kfull!xxxInternalDoPaint0x108ffffa88b5b18f350 ffffa9d4bdd30f1c win32kfull!xxxDoPaint0x52ffffa88b5b18f3b0 ffffa9d4bdd2ff08 win32kfull!xxxRealInternalGetMessage0xfacffffa88b5b18f880 ffffa9d4be1871ce win32kfull!NtUserPeekMessage0x158ffffa88b5b18f940 fffff8066640d8f5 win32k!NtUserPeekMessage0x2affffa88b5b18f990 00007ffe1816ff74 nt!KiSystemServiceCopyEnd0x25 (TrapFrame ffffa88b5b18fa00)000000000077e558 0000000000000000 0x00007ffe1816ff74如果线程信息很少的话可以用 .process 将此进程作为当前上下文然后加载用户符号输出如下 lkd .process ffffab8ebea75080 Implicit process is now ffffab8ebea75080 lkd .reload Connected to Windows 10 19041 x64 target at (Tue Mar 21 13:21:21.213 2023 (UTC 8:00)), ptr64 TRUE Loading Kernel Symbols ............................................................... ................................................................ ................................................................ ................. Loading User Symbols PEB is paged out (Peb.Ldr 00000000009f1018). Type .hh dbgerr001 for details Loading unloaded module list 从刚才的线程栈上看很明显有一个 win32kfull!xxxSendMessage0x2c 方法熟悉 SendMessage 的朋友都知道这个是用来向某个窗体发消息的那到底是哪一个窗体呢 3. 到底给哪个窗体发消息 要想获取发送窗体的句柄需要提取 win32kfull!xxxSendMessage 方法的第一个参数在 x64 的调用协定下它是用 rcx 传递的需要分析下汇编代码如果 rcx 没有放到栈里那就无法提取了。 为了少点麻烦建议让朋友看下 32bit 的操作系统上是否也有这个问题结果反馈说也存在使用 !thread xxx 切到目标线程使用 kb 提取第一个参数地址上的值即00010598截图如下 丢了一个 sdbgext 插件让朋友看下窗体句柄信息发现是个 64bit 的其实除了它还可以用 Spy 观察窗体句柄重点就是找到这个神秘窗体 是由哪个进程下的线程创建的当把句柄号丢进去后还真给找到了有点黑暗中寻找到了曙光。截图如下 从 Spy 看当前窗体是由进程号:000016E0下的线程号0000109C 创建的经过比对这个线程就是本进程的某个线程号。 分析到这里其实就很明朗了是因为这个线程 0000109C 创建了一个用户控件导致内核态 在某种情况下给它发消息接下来就是寻找到底是什么控件创建的。 4. 罪魁祸首 关于非主线程创建用户控件导致的卡死我感觉都已经说破嘴皮了还是有非常多的人犯这个毛病无语哈解决办法就是用 bp 去拦截 System.Windows.Forms.ApplicationMarshalingControl..ctor 方法具体方案可参考我的文章【一个超经典 WinForm 卡死问题的再反思】 接下来就是朋友的苦苦调试终于给找到了截图如下 对就是这么一句 Intptr handle this.Handle 代码内核句柄的获取让它在这个线程上生根了。 三总结 就是这么一句代码来来回回兜了好几圈花费了朋友个把星期终于给解决了也算是一个好结果吧这个案例需要实时观察程序的内核态和用户态看 dump 效果不大造成了这么多时间的浪费。 相信这个案例也让公司老板对他 刮目相看。
http://www.w-s-a.com/news/11961/

相关文章:

  • 网络推广网站的方法亳州网站制作公司
  • 网站域名主机空间区别广告设计专业前景
  • 新手做啥网站好dedecms网站的源码如何安装
  • 哪些网站是用iframe免费网站域名查询
  • 自己开的网站 可以做代销吗百度查找相似图片
  • 网站建设设计作业网站备案渝
  • 中国重庆网站建设福州短视频seo获客
  • 遵义官网网站建设网站移动端开发公司
  • 宜春网站推广优化电子商务网站建设收益举例
  • 游戏网站开发实验报告装修平台哪家好
  • 外贸自己建网站小红门网站建设
  • 中国著名的做网站渗透设计规范网站
  • 公司网站备案多少钱推特最新消息今天
  • 网站关键词设置代码seo搜索优化 指数
  • 做网站卖东西送上门做暧暧xoxo网站
  • 网站网站设计公司网站维护运营好做吗
  • 照片做成视频的软件seo两个域名一个网站有影响吗
  • 制作动画的网站河南省住房城乡建设门户网站
  • 网站推广原则做网站的那个语言好
  • 潍坊网站建设怎样商品网站建设设计思路
  • 建网站公司是如何赚钱南昌营销网站公司哪家好
  • 淘宝客网站管理质量好网站建设费用
  • 网站建设教程搭建青岛中企动力做网站怎么样
  • wordpress最底部网站优化怎么弄
  • 二手市场网站建设的目的长沙ui设计公司
  • 微信公众号做留言网站wordpress详情页选择模板
  • php网站开发面向对象教程如何做分享赚钱的网站
  • 山东网站建设最便宜常州网站建站公司
  • 网站地图 seo中国建设招标网是私人网站吗
  • 高中作文网站全网营销有哪些平台