当前位置:首页 > 科技  > 软件

记一次 .NET 某质量检测中心系统崩溃分析

来源: 责编: 时间:2024-06-05 17:44:13 210观看
导读一、背景1. 讲故事这些天有点意思,遇到的几个程序故障都是和Windows操作系统或者第三方组件有关系,真的有点无语,今天就带给大家一例 IIS 相关的与大家分享,这是一家国企的.NET程序,出现了崩溃急需分析。二、WinDbg 分析1.

一、背景

1. 讲故事

这些天有点意思,遇到的几个程序故障都是和Windows操作系统或者第三方组件有关系,真的有点无语,今天就带给大家一例 IIS 相关的与大家分享,这是一家国企的.NET程序,出现了崩溃急需分析。Cu328资讯网——每日最新资讯28at.com

二、WinDbg 分析

1. 为什么会崩溃

崩溃原因相对还是好找的,双击dump文件之后错误信息马上就列出来了,参考如下:Cu328资讯网——每日最新资讯28at.com

This dump file has an exception of interest stored in it.The stored exception information can be accessed via .ecxr.(3950.1890): Stack overflow - code c00000fd (first/second chance not available)For analysis of this file, run !analyze -veax=72ae2290 ebx=00000000 ecx=72afa1c0 edx=00000000 esi=72afa1c0 edi=01cb1d7ceip=72afa1e6 esp=3e673000 ebp=3e673010 iopl=0         nv up ei pl zr na pe nccs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010246iiscore+0x1a1e6:72afa1e6 ff15a064b172    call    dword ptr [iiscore!GetProtocolManager+0x9370 (72b164a0)] ds:002b:72b164a0=72af5ab0

从卦中的 Stack overflow - code c00000fd 来看,这又是一个经典的栈溢出导致的崩溃,这里栈溢出崩溃的原理就不说了,接下来观察下是什么代码导致的,难道又是一个死循环吗?Cu328资讯网——每日最新资讯28at.com

2. 到底是谁诱导的

要想找到是谁诱导的,肯定要看下顶层代码是什么,使用 k 0xffff 即可。Cu328资讯网——每日最新资讯28at.com

2732 3e6adcc0 72afa1f0     iiscore+0x1a1f02733 3e6adcd8 72afa1f0     iiscore+0x1a1f02734 3e6adcf0 72afa1f0     iiscore+0x1a1f02735 3e6add08 72afa1f0     iiscore+0x1a1f02736 3e6add20 72afa1f0     iiscore+0x1a1f02737 3e6add38 72afa1f0     iiscore+0x1a1f0...273e 3e6ade8c 734e8a9b     webengine4!W3_MGD_HANDLER::ReadEntityBody+0x134273f 3e6adeac 60251594     webengine4!MgdReadEntityBody+0x5b...2762 3e6aed0c 601fecc3     System_Web_ni+0x2319412763 3e6aee00 601fe80f     System_Web_ni+0x1decc32764 3e6aee28 028fe29a     System_Web_ni+0x1de80f2765 3e6aee48 72cbfa41     0x28fe29a2766 3e6aeea8 72cbf972     clr!UM2MThunk_Wrapper+0x76...276a 3e6af024 7348ab83     webengine4!W3_MGD_HANDLER::ProcessNotification+0x62276b 3e6af038 72b3bc52     webengine4!ProcessNotificationCallback+0x33

从卦象看,它的走势大概是 托管 -> webengine4 -> iiscore ,然后就死掉了,很显然 iiscore 是 iis 的核心组件,可以用 lmvm 观察下。Cu328资讯网——每日最新资讯28at.com

0:087> lmvm iiscoreBrowse full module liststart    end        module name72ae0000 72b1f000   iiscore    (export symbols)       iiscore.dll    Loaded symbol image file: iiscore.dll    Image path: C:/Windows/System32/inetsrv/iiscore.dll    Image name: iiscore.dll    Browse all global symbols  functions  data    Timestamp:        Fri Sep  8 11:04:45 2023 (64FA8F4D)    CheckSum:         00042ABA    ImageSize:        0003F000    File version:     8.5.9600.21613    Product version:  8.5.9600.21613    File flags:       0 (Mask 3F)    File OS:          40004 NT Win32    File type:        2.0 Dll    File date:        00000000.00000000    Translations:     0000.04b0    Information from resource tables:        CompanyName:      Microsoft Corporation        ProductName:      Internet Information Services        InternalName:     iiscore.dll        OriginalFilename: iiscore.dll        ProductVersion:   8.5.9600.21613        FileVersion:      8.5.9600.21613 (winblue_ltsb.230907-1700)        FileDescription:  IIS Web Server Core        LegalCopyright:   © Microsoft Corporation. All rights reserved.

其实到这里就有很大的好奇心,到底是什么代码这么厉害,能导致底层的 iiscore 死循环,可以使用 !clrstack 观察下托管栈。Cu328资讯网——每日最新资讯28at.com

0:087> !clrstackOS Thread Id: 0x1890 (87)Child SP       IP Call Site3e6aded4 72afa1e6 [InlinedCallFrame: 3e6aded4] 3e6aded0 60251594 DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, Byte[], Int32, Int32, Boolean, Int32 ByRef, IntPtr ByRef)3e6aded4 60250906 [InlinedCallFrame: 3e6aded4] System.Web.Hosting.UnsafeIISMethods.MgdReadEntityBody(IntPtr, Byte[], Int32, Int32, Boolean, Int32 ByRef, IntPtr ByRef)3e6adf28 60250906 System.Web.Hosting.IIS7WorkerRequest.ReadEntityCoreSync(Byte[], Int32, Int32)3e6adf64 602508b9 System.Web.Hosting.IIS7WorkerRequest.ReadEntityBody(Byte[], Int32)3e6adf74 6020dcfc System.Web.HttpRequest.GetEntireRawContent()3e6adfa0 6020cc50 System.Web.HttpRequest.FillInFormCollection()3e6adfdc 6020ebb6 System.Web.HttpRequest.EnsureForm()3e6adfec 6020eb3e System.Web.HttpRequest.get_Form()3e6adff8 2e17391e xxx.RequestFilterModule.CheckRequest()

接下来观察托管层的 CheckRequest() 的链路,截图如下:Cu328资讯网——每日最新资讯28at.com

图片图片Cu328资讯网——每日最新资讯28at.com

这简直太不可思议了,一句平常无奇的 base.Request.Form != null 代码,居然把IIS给弄崩掉了,很显然问题大概率不在 托管层。Cu328资讯网——每日最新资讯28at.com

3. iiscore 在执行什么死循环

托管层这条路断了之后,接下来在回头观察 iiscore 处的汇编代码,截图如下:Cu328资讯网——每日最新资讯28at.com

图片图片Cu328资讯网——每日最新资讯28at.com

由于没有 iiscore 的源代码,也没有做复原的必要,但不管怎么样,可以看到这地方确实存在着死循环,我们在用户态没法去做修补,最后看下当前系统情况。Cu328资讯网——每日最新资讯28at.com

0:087> vertargetWindows 8.1 Version 9600 MP (8 procs) Free x86 compatibleProduct: Server, suite: TerminalServer SingleUserTSEdition build lab: 6.3.9600.18217 (winblue_ltsb.160124-0053)Debug session time: Tue Mar 19 10:00:33.000 2024 (UTC + 8:00)System Uptime: 46 days 1:32:14.541Process Uptime: 0 days 19:11:55.000  Kernel time: 0 days 0:06:09.000  User time: 0 days 0:14:38.000

可以看到当前是 Windows Server 2012 R2,跑的是 IIS 8.5 ,由于 IIS 是强绑到 Windows的,所以能给到的建议就是:Cu328资讯网——每日最新资讯28at.com

  1. 使用 SFC /SCANNOW 检修下系统文件,这是某软 CSS 的那帮人最喜欢用的命令 O(∩_∩)O
  2. 升级操作系统,提升 IIS 的版本。

三、总结

有时候程序崩溃往往不是你代码写的烂,极有可能是底层承载的bug导致的,甚至罪魁祸首是环境中的辐射,所以分析崩溃类的dump也挺玄学的,以后程序出问题第一时间不要大包大揽的往自己身上背,找出问题才是关键。Cu328资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-92136-0.html记一次 .NET 某质量检测中心系统崩溃分析

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用 Visual Studio 分析 .NET Dump

下一篇: Rust 开发到底用 RustRover 与还是 VS Code Rust 插件?

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了“本地生活”入口,位置较深,位于首页的“充值中心”内,目前主要售卖美食相关的
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 网传小米汽车开始筛选交付中心 建筑面积不低于3000平方米

    7月7日消息,近日有微博网友@长三角行健者爆料称,据经销商集团反馈,小米汽车目前已经开始了交付中心的筛选工作,要求候选场地至少有120个车位,建筑不能低
  • 利用职权私自解除被封帐号 Meta开除20多名员工

    11月18日消息,据外媒援引知情人士表示,过去一年时间内,Facebook母公司Meta解雇或处罚了20多名员工以及合同工,指控这些人通过内部系统以不当方式重置用户帐号,其
Top