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

一:背景

1. 讲故事

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

二:WinDbg 分析

1. 为什么会崩溃

崩溃原因相对还是好找的,双击dump文件之后错误信息马上就列出来了,参考如下:


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 -v
eax=72ae2290 ebx=00000000 ecx=72afa1c0 edx=00000000 esi=72afa1c0 edi=01cb1d7c
eip=72afa1e6 esp=3e673000 ebp=3e673010 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010246
iiscore+0x1a1e6:
72afa1e6 ff15a064b172    call    dword ptr [iiscore!GetProtocolManager+0x9370 (72b164a0)] ds:002b:72b164a0=72af5ab0

从卦中的 Stack overflow - code c00000fd 来看,这又是一个经典的栈溢出导致的崩溃,这里栈溢出崩溃的原理就不说了,接下来观察下是什么代码导致的,难道又是一个死循环吗?

2. 到底是谁诱导的

要想找到是谁诱导的,肯定要看下顶层代码是什么,使用 k 0xffff 即可。


2732 3e6adcc0 72afa1f0     iiscore+0x1a1f0
2733 3e6adcd8 72afa1f0     iiscore+0x1a1f0
2734 3e6adcf0 72afa1f0     iiscore+0x1a1f0
2735 3e6add08 72afa1f0     iiscore+0x1a1f0
2736 3e6add20 72afa1f0     iiscore+0x1a1f0
2737 3e6add38 72afa1f0     iiscore+0x1a1f0
...
273e 3e6ade8c 734e8a9b     webengine4!W3_MGD_HANDLER::ReadEntityBody+0x134
273f 3e6adeac 60251594     webengine4!MgdReadEntityBody+0x5b
...
2762 3e6aed0c 601fecc3     System_Web_ni+0x231941
2763 3e6aee00 601fe80f     System_Web_ni+0x1decc3
2764 3e6aee28 028fe29a     System_Web_ni+0x1de80f
2765 3e6aee48 72cbfa41     0x28fe29a
2766 3e6aeea8 72cbf972     clr!UM2MThunk_Wrapper+0x76
...
276a 3e6af024 7348ab83     webengine4!W3_MGD_HANDLER::ProcessNotification+0x62
276b 3e6af038 72b3bc52     webengine4!ProcessNotificationCallback+0x33

从卦象看,它的走势大概是 托管 -> webengine4 -> iiscore ,然后就死掉了,很显然 iiscore 是 iis 的核心组件,可以用 lmvm 观察下。


0:087> lmvm iiscore
Browse full module list
start    end        module name
72ae0000 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 观察下托管栈。


0:087> !clrstack
OS Thread Id: 0x1890 (87)
Child SP       IP Call Site
3e6aded4 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() 的链路,截图如下:

这简直太不可思议了,一句平常无奇的 base.Request.Form != null 代码,居然把IIS给弄崩掉了,很显然问题大概率不在 托管层。

3. iiscore 在执行什么死循环

托管层这条路断了之后,接下来在回头观察 iiscore 处的汇编代码,截图如下:

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


0:087> vertarget
Windows 8.1 Version 9600 MP (8 procs) Free x86 compatible
Product: Server, suite: TerminalServer SingleUserTS
Edition 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.541
Process 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的,所以能给到的建议就是:

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

三:总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/678248.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

年中企业业绩管理新篇章:用友BIP收入云助力高效管理!

随着市场竞争的加剧,年中时刻对于企业而言,不仅是评估上半年业绩的节点,更是调整策略、确保全年目标达成的关键时期。高效的业绩管理不仅需要明确的目标设定和计划制定,更需要借助先进的信息技术工具来提升管理效率和决策质量。在…

LES大涡模拟基础

参考自https://www.bilibili.com/video/BV1EL411A7gu?p30&vd_sourceb624b9d3e49866ce8c6a455f1ab7c03f 如何解析涡 用网格不能解析单元尺度以下的涡(小涡)而只能解析大涡 对于小涡,需要引入亚格子模型 如何选择合适的网格尺寸&…

智能充电模式,治好了我多年的充电焦虑

我是一个有严重电量焦虑的人,而且我发现我周围很多人都是。比如说,我晚上习惯把手机插上充电器,然后就放一边不管了,这样第二天出门才能100%满电;还有啊,有时候我在办公室一坐就是好几个小时,手…

一键式AI智能知识库-谈如何打造人性化的LLM RAG知识库的重要性

RAG系统简介 在现代的LLM RAG(Retrieval-Augmented Generation)系统中,数据流的设计至关重要。让我们通过一个具体的例子来详细描述一个标准RAG系统的数据流。 首先,用户可以通过多种应用入口访问系统,包括PC应用、微…

实用新型专利申请材料的撰写与准备

在科技创新日益活跃的今天,实用新型专利的申请与保护显得尤为重要。实用新型专利作为一种重要的知识产权形式,对于推动科技进步、促进经济发展具有重要意义。 首先我们需要明确实用新型专利的定义。实用新型专利是指对产品的形状、构造或者其结合所提出…

用实力说话!深度解析蓝海创意云渲染“不排队”背后的秘密

蓝海创意云渲染农场https://www.vsochina.com/cn/render蓝海创意云渲染农场曾为《流浪地球2》、《长津湖》、《独行月球》、《斗破苍穹年番》、《巴霍巴利王2》等知名影视动漫作品提供云渲染服务。这些渲染案例充分证明了蓝海创意渲染深厚的技术底蕴和强大的渲染实力。那么&…

【权威出版/投稿优惠】2024年机器视觉与自动化技术国际会议(MVAT 2024)

2024 International Conference on Machine Vision and Automation Technology 2024年机器视觉与自动化技术国际会议 【会议信息】 会议简称:MVAT 2024截稿时间:(以官网为准)大会地点:中国重庆会议官网:www.icmvat.co…

实现 ChatPDF RAG:密集向量检索(R)+上下文学习(AG)

实现 ChatPDF & RAG:密集向量检索(R)上下文学习(AG) RAG 是啥?怎么优化 RAG? RAG 是啥? RAG 是检索增强生成的缩写,是一种结合了信息检索技术与语言生成模型的人工智…

第1章 起步

第1章 起步 1.1搭建编程环境1.2 在不同操作系统中搭建 Python 编程环境1.3 运行Hello world 程序1.4 解决安装问题1.5 从终端运行 Python 程序 1.1搭建编程环境 1.1.1 Python 版本 本书编写期间的最新版本为 Python 3.7 1.1.2 运行 Python 代码片段 Python 自带一个在终端窗口…

Shell脚本快速入门

为什么要学shell?能做什么? 答:CI/CD 持续集成,自动化部署作业方式,需要将一系列linux命令程序化,shell 就能做到,提高运维人员的工作效率。 指定解析器: (1) shell解析器 #…

数据中心横向虚拟化 M-LAG 技术

M-LAG 一、M-LAG概述 1、M-LAG定义:M-LAG(Multichassis Link Aggregation Group)是跨设备链路聚合组。可以将两台设备进行跨设备链路聚合,从而把链路的可靠性从单板机提高到了设备级。 2、优势: (1)、M-LAG系统的两台…

golang界面设计器,全网少见

今天登录govcl的网站,无意中看到有个简易UI设计器。 对于golang的UI专用设计器,还没在网上真正见过。 之前也用govcl来做过两三个桌面应用,好用是好用,不过要安装Lazarus的IDE来拖动设计UI,还要配置很多东西&#xff0…

淘宝评论API调用指南,让你购物不再困扰

一、淘宝评论API概述 淘宝评论API是淘宝开放平台提供的一种服务,它允许开发者通过调用API接口获取淘宝商品评论数据,联讯数据从而为用户提供更加丰富和实用的购物决策信息。通过使用淘宝评论API,开发者可以轻松地实现以下功能: …

AMEYA360:申矽凌推出系统级热管理芯片CTF230X系列 助力WiFi市场换代

办公、刷剧、网购、手游...2022年,蓬勃的全球数字经济活动,总共产生了近100ZB的数据,其中相当比例终端流量是通过无线连接传输,WiFi更是其中的“主渠道”。旺盛的需求,带动WiFi设备年出货量达到40亿台量级,…

VMware 三种网络模式

目录 一、网卡、路由器、交换机 二、虚拟网络编辑器 三、网络模式 1.桥接模式 通信方式 特点 配置 连通情况 使用场景 2.NAT模式 通信方式 特点 配置 连通情况 使用场景 3.仅主机 通信方式 特点 配置 连通情况 使用场景 一、网卡、路由器、交换机 网卡(Ne…

【数据结构】 排序算法总结,直接选择排序详解!

文章目录 1. 排序几个重点概念的理解2. 排序算法的分析🐧3.直接选择排序 1. 排序几个重点概念的理解 2. 排序算法的分析🐧 3.直接选择排序 🐧 begin 有可能就是 maxi ,所以交换的时候,要及时更新 maxi 🍎…

JVM学习-监控工具(三)

jconsole 从Java5开始,在JDK中自带的java监控和管理控制台用于对JVM中内存、线程、和类等的监控,是一个基本JMX(java management extendsions)的GUI性能监控工具 三种连接方式 Local:使用JConsole连接是一个正在本地系统运行的JVM&#xf…

你真的会做抖音小店吗?这三个“流量密码”还有谁不知道!

哈喽~我是电商月月 互联网时代,电商无疑是当前阶段最赚钱的项目了 而互联网变现的关键因素就是:流量, 选择在抖音做店的原因之一,不外乎就是商家,看中了抖音内部的流量 但现实就是,有好多伙伴做店根本拿…

vscode 运行和调试

vscode使用断点 1.安装并激活扩展 Debugger for Chrome (弃用 --> JavaScript Debugger)Debugger for Firefox 2. 配置config文件 打开 config/index.js 并找到 devtool property。将其更新为: 如果你使用的是 Vue CLI 2,请设置并更新 config/in…

Linux环境下安装MySQL详细教程(手把手附图安装!!!)

目录 一、前言 二、安装前的环境检查 三、下载官方的 MySQL 安装包 四、开始安装 MySQL 五、尝试初次启动 MySQL 六、给MySQL 做一些简单的小配置 七、共勉 一、前言 本次专题将带大家进入一个新的专题 ---- MySQL。作为本次专题的第一篇博客,肯定是带大家一起…