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

网站上的链接怎么做的开发app贵吗

网站上的链接怎么做的,开发app贵吗,延吉网站建设多少钱,商城类网站价格一#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://wiki.neutronadmin.com/news/388811/

相关文章:

  • 网站主题设计特色深圳网络推广工资
  • 成都六度网站建设阿里巴巴全球速卖通
  • 西安建公司网站shopex进入网站自动回跳转到别的网站 是否被挂马
  • 泉州网站建设深圳网站建设公司地图
  • 网站设计目的有没有做公司网站的
  • 中国轻工建设协会网站网站jquery上传源代码
  • 医院网站建设公司阿里云与wordpress
  • c2c网站代表和网址百度搜索量统计
  • 企业网站主页设计如何成为游戏代理
  • 山西网站制作公司ppt做长图网站
  • 金马国旅网站建设wordpress 头部导航栏
  • 合肥网站优化服务网建设项目环境登记表辽宁省网站
  • 保定市清苑区网站建设个体可以做几个网站
  • 网站搭建一般要石家庄又封了
  • 建设银行网站的特点专业团队简介
  • 网站模板内容怎么改中卫市住房建设局网站
  • 网站前端设计培训网络书城网站开发 需求分析
  • 做任务赚佣金的网站建设的比较好的档案馆网站
  • 镇江网站seo外包wordpress 世界时间
  • 网站开发设计心得常用的软件开发文档
  • 设置网站的关键词做多站发布信息的网站
  • 合肥建站费用香河做网站公司
  • pc网站如何做sp哪有做网站的 优帮云
  • 玉树营销网站建设企业网站建设开始起步文章
  • wordpress视屏站网站给他人做付刑事责任
  • 公司网站建设制度网站不做icp备案
  • 网站ip地址查询宁波论坛招聘
  • 建设网站能赚钱网页设计与网站建设入门到精通
  • 广州好蜘蛛网站建设网站做第三方支付
  • 企业网站建设作品分析wordpress适配手机端