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

记一次 .NET某上位视觉程序离奇崩溃分析

来源: 责编: 时间:2024-07-12 17:24:46 238观看
导读一、背景1. 讲故事前段时间有位朋友找到我,说他们有一个崩溃的dump让我帮忙看下怎么回事。话不多说,既然有 dump 来了,那就上 windbg 说话吧。二:WinDbg 分析1. 为什么会崩溃说实话windbg非常强大,双击打开dump就能第一时

一、背景

1. 讲故事

前段时间有位朋友找到我,说他们有一个崩溃的dump让我帮忙看下怎么回事。IHz28资讯网——每日最新资讯28at.com

话不多说,既然有 dump 来了,那就上 windbg 说话吧。IHz28资讯网——每日最新资讯28at.com

二:WinDbg 分析

1. 为什么会崩溃

说实话windbg非常强大,双击打开dump就能第一时间帮你显示出简略的异常信息,输出如下:IHz28资讯网——每日最新资讯28at.com

This dump file has an exception of interest stored in it.The stored exception information can be accessed via .ecxr.(bf8.5dc4): Access violation - code c0000005 (first/second chance not available)For analysis of this file, run !analyze -vclr!WKS::gc_heap::mark_object_simple1+0x220:00007ffb`380453c4 833a00          cmp     dword ptr [rdx],0 ds:00007ffa`35451300=????????

从卦中又看到了经典的 mark_object_simple1 方法,这个方法是GC用来做对象标记之用的,所以大概率又是托管堆损坏,真是无语了,接下来用 !verifyheap 检查下托管堆。IHz28资讯网——每日最新资讯28at.com

0:083> !verifyheapobject 00000218e96963d8: bad member 00000218E9696450 at 00000218E9696420Last good object: 00000218E96963C0.Could not request method table data for object 00000218E9696450 (MethodTable: 00007FFA35451300).Last good object: 00000218E96963D8.

一看这卦就很不吉利,真的是有对象的mt是不对的,至此我们把崩溃的直接原因给找到了。IHz28资讯网——每日最新资讯28at.com

2. 为什么对象损坏了

要找到这个答案就需要深挖 00000218e96963d8 对象,分别使用 !do 命令以及 dp 来观察内存地址。IHz28资讯网——每日最新资讯28at.com

0:083> !do 00000218e96963d8Name:        System.Threading.Tasks.Task+DelayPromiseMethodTable: 00007ffb3542b3e8EEClass:     00007ffb3567c7c0Size:        120(0x78) bytesFile:        C:/Windows/Microsoft.Net/assembly/GAC_64/mscorlib/v4.0_4.0.0.0__b77a5c561934e089/mscorlib.dllFields:...00007ffb35451300  40035d5       48 ...m.Threading.Timer  0 instance 00000218e9696450 Timer0:083> dp 00000218e9696450 L600000218`e9696450  00007ffa`35451301 00000000`0000000000000218`e9696460  00000218`e96964c8 00000000`0000000000000218`e9696470  00007ffb`353e4b51 00000218`e9696368

仔细观察卦中对象 00000218e9696450 所显示的mt,你会发现一个是 00007ffb35451300,一个是 00007ffa35451301,很显然前者是对的,后者是错的,可以分别用 !dumpmt 做个验证。IHz28资讯网——每日最新资讯28at.com

0:083> !dumpmt 00007ffb35451300EEClass:         00007ffb356942f0Module:          00007ffb353b1000Name:            System.Threading.TimermdToken:         0000000002000504File:            C:/Windows/Microsoft.Net/assembly/GAC_64/mscorlib/v4.0_4.0.0.0__b77a5c561934e089/mscorlib.dllBaseSize:        0x20ComponentSize:   0x0Slots in VTable: 23Number of IFaces in IFaceMap: 10:083> !dumpmt 00007ffa3545130100007ffa35451301 is not a MethodTable

细心的朋友会发现虽然两个mt地址不一样,但已经非常相近,看样子又是一例经典的bit位翻转,我去,用 .formats 转成二进制观察一下,截图如下:IHz28资讯网——每日最新资讯28at.com

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

从卦中可以清晰的看到当前地址有两个 bit 的翻转,分别是第0位和第32位,接下来就要洞察为什么会有两个bit位的翻转?IHz28资讯网——每日最新资讯28at.com

3. 真的存在两个bit位翻转吗

接下来我们逐一来聊一下。IHz28资讯网——每日最新资讯28at.com

  • bit 0 为什么会翻转

熟悉 coreclr 底层的朋友应该知道,gc 在标记的过程中会给 mt 的第0位设置为1,表示当前对象在深度优先中已经标记过,防止重复标记,当然这个也是有源码作证的,简化后的代码如下:IHz28资讯网——每日最新资讯28at.com

inline BOOL gc_heap::gc_mark(uint8_t* o, uint8_t* low, uint8_t* high, int condemned_gen){ if ((o >= low) && (o < high)) {  BOOL already_marked = marked(o);  if (already_marked)  {   return FALSE;  }  set_marked(o);    return TRUE; }}#define marked(i) header(i)->IsMarked()BOOL IsMarked() const{ return !!(((size_t)RawGetMethodTable()) & GC_MARKED);}

有了这段源码,这个 bit 为什么为 1 就能轻松的解释了,所以这个翻转是一个正常情况。IHz28资讯网——每日最新资讯28at.com

  • bit 32 为什么会翻转

这个是我无法解释的,也正是因为这个 bit32 的翻转导致 gc 认为这个 obj 是一个损坏的对象,到底是什么原因呢?民间众说纷纭,在我的过往分析旅程中我已见过两例,但我不敢确定自己又遇到了辐射类的奇葩情况,所以也第一时间找朋友确认程序周边是否存在辐射环境。IHz28资讯网——每日最新资讯28at.com

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

朋友反馈过来附近有 伺服电机 类,说实话工控的东西我是真的不太懂,只能上网搜搜这玩意是否有辐射,截图如下:IHz28资讯网——每日最新资讯28at.com

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

到底是不是这玩意导致的,其实我心里也没底,跟朋友的沟通后说是只出现过一次,这就更加玄乎了。IHz28资讯网——每日最新资讯28at.com

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

不管怎么说,我只能给出如下两个方案:IHz28资讯网——每日最新资讯28at.com

  • 上 ECC 纠错内存
  • 远离辐射环境

三:总结

在大工控领域里,这是我见过第三例bit位翻转导致的程序崩溃,太无语了,恶魔到底是不是旁边的 伺服电机 ?IHz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-100725-0.html记一次 .NET某上位视觉程序离奇崩溃分析

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

上一篇: React 支持 Form Action 是在作妖?不,它是一种重磅回归

下一篇: Python 时间艺术:五分钟精通 time 模块的神秘功能

标签:
  • 热门焦点
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
Top