日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

記一次 .NET某上位視覺程序離奇崩潰分析

來(lái)源: 責(zé)編: 時(shí)間:2024-07-12 17:24:46 132觀看
導(dǎo)讀一、背景1. 講故事前段時(shí)間有位朋友找到我,說(shuō)他們有一個(gè)崩潰的dump讓我?guī)兔聪略趺椿厥隆T挷欢嗾f(shuō),既然有 dump 來(lái)了,那就上 windbg 說(shuō)話吧。二:WinDbg 分析1. 為什么會(huì)崩潰說(shuō)實(shí)話windbg非常強(qiáng)大,雙擊打開dump就能第一時(shí)

一、背景

1. 講故事

前段時(shí)間有位朋友找到我,說(shuō)他們有一個(gè)崩潰的dump讓我?guī)兔聪略趺椿厥隆?span style="display:none">syO28資訊網(wǎng)——每日最新資訊28at.com

話不多說(shuō),既然有 dump 來(lái)了,那就上 windbg 說(shuō)話吧。syO28資訊網(wǎng)——每日最新資訊28at.com

二:WinDbg 分析

1. 為什么會(huì)崩潰

說(shuō)實(shí)話windbg非常強(qiáng)大,雙擊打開dump就能第一時(shí)間幫你顯示出簡(jiǎn)略的異常信息,輸出如下:syO28資訊網(wǎng)——每日最新資訊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=????????

從卦中又看到了經(jīng)典的 mark_object_simple1 方法,這個(gè)方法是GC用來(lái)做對(duì)象標(biāo)記之用的,所以大概率又是托管堆損壞,真是無(wú)語(yǔ)了,接下來(lái)用 !verifyheap 檢查下托管堆。syO28資訊網(wǎng)——每日最新資訊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.

一看這卦就很不吉利,真的是有對(duì)象的mt是不對(duì)的,至此我們把崩潰的直接原因給找到了。syO28資訊網(wǎng)——每日最新資訊28at.com

2. 為什么對(duì)象損壞了

要找到這個(gè)答案就需要深挖 00000218e96963d8 對(duì)象,分別使用 !do 命令以及 dp 來(lái)觀察內(nèi)存地址。syO28資訊網(wǎng)——每日最新資訊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

仔細(xì)觀察卦中對(duì)象 00000218e9696450 所顯示的mt,你會(huì)發(fā)現(xiàn)一個(gè)是 00007ffb35451300,一個(gè)是 00007ffa35451301,很顯然前者是對(duì)的,后者是錯(cuò)的,可以分別用 !dumpmt 做個(gè)驗(yàn)證。syO28資訊網(wǎng)——每日最新資訊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

細(xì)心的朋友會(huì)發(fā)現(xiàn)雖然兩個(gè)mt地址不一樣,但已經(jīng)非常相近,看樣子又是一例經(jīng)典的bit位翻轉(zhuǎn),我去,用 .formats 轉(zhuǎn)成二進(jìn)制觀察一下,截圖如下:syO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片syO28資訊網(wǎng)——每日最新資訊28at.com

從卦中可以清晰的看到當(dāng)前地址有兩個(gè) bit 的翻轉(zhuǎn),分別是第0位和第32位,接下來(lái)就要洞察為什么會(huì)有兩個(gè)bit位的翻轉(zhuǎn)?syO28資訊網(wǎng)——每日最新資訊28at.com

3. 真的存在兩個(gè)bit位翻轉(zhuǎn)嗎

接下來(lái)我們逐一來(lái)聊一下。syO28資訊網(wǎng)——每日最新資訊28at.com

  • bit 0 為什么會(huì)翻轉(zhuǎn)

熟悉 coreclr 底層的朋友應(yīng)該知道,gc 在標(biāo)記的過(guò)程中會(huì)給 mt 的第0位設(shè)置為1,表示當(dāng)前對(duì)象在深度優(yōu)先中已經(jīng)標(biāo)記過(guò),防止重復(fù)標(biāo)記,當(dāng)然這個(gè)也是有源碼作證的,簡(jiǎn)化后的代碼如下:syO28資訊網(wǎng)——每日最新資訊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);}

有了這段源碼,這個(gè) bit 為什么為 1 就能輕松的解釋了,所以這個(gè)翻轉(zhuǎn)是一個(gè)正常情況。syO28資訊網(wǎng)——每日最新資訊28at.com

  • bit 32 為什么會(huì)翻轉(zhuǎn)

這個(gè)是我無(wú)法解釋的,也正是因?yàn)檫@個(gè) bit32 的翻轉(zhuǎn)導(dǎo)致 gc 認(rèn)為這個(gè) obj 是一個(gè)損壞的對(duì)象,到底是什么原因呢?民間眾說(shuō)紛紜,在我的過(guò)往分析旅程中我已見過(guò)兩例,但我不敢確定自己又遇到了輻射類的奇葩情況,所以也第一時(shí)間找朋友確認(rèn)程序周邊是否存在輻射環(huán)境。syO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片syO28資訊網(wǎng)——每日最新資訊28at.com

朋友反饋過(guò)來(lái)附近有 伺服電機(jī) 類,說(shuō)實(shí)話工控的東西我是真的不太懂,只能上網(wǎng)搜搜這玩意是否有輻射,截圖如下:syO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片syO28資訊網(wǎng)——每日最新資訊28at.com

到底是不是這玩意導(dǎo)致的,其實(shí)我心里也沒底,跟朋友的溝通后說(shuō)是只出現(xiàn)過(guò)一次,這就更加玄乎了。syO28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片syO28資訊網(wǎng)——每日最新資訊28at.com

不管怎么說(shuō),我只能給出如下兩個(gè)方案:syO28資訊網(wǎng)——每日最新資訊28at.com

  • 上 ECC 糾錯(cuò)內(nèi)存
  • 遠(yuǎn)離輻射環(huán)境

三:總結(jié)

在大工控領(lǐng)域里,這是我見過(guò)第三例bit位翻轉(zhuǎn)導(dǎo)致的程序崩潰,太無(wú)語(yǔ)了,惡魔到底是不是旁邊的 伺服電機(jī) ?syO28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100725-0.html記一次 .NET某上位視覺程序離奇崩潰分析

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

下一篇: Python 時(shí)間藝術(shù):五分鐘精通 time 模塊的神秘功能

標(biāo)簽:
  • 熱門焦點(diǎn)
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對(duì)Reader和Writer接口的組合,
  • 不容錯(cuò)過(guò)的MSBuild技巧,必備用法詳解和實(shí)踐指南

    一、MSBuild簡(jiǎn)介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動(dòng)化構(gòu)建過(guò)程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個(gè)數(shù)字。例如,一個(gè)擁有三個(gè)或更多子項(xiàng)的grid。你可能會(huì)想,為什么需要這樣做呢?在某些情況下,一個(gè)組件或一個(gè)布局可能會(huì)
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 三萬(wàn)字盤點(diǎn) Spring 九大核心基礎(chǔ)功能

    大家好,我是三友~~今天來(lái)跟大家聊一聊Spring的9大核心基礎(chǔ)功能。話不多說(shuō),先上目錄:圖片友情提示,本文過(guò)長(zhǎng),建議收藏,嘿嘿嘿!一、資源管理資源管理是Spring的一個(gè)核心的基礎(chǔ)功能,不
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(chǔ)(消息堆積)、消費(fèi) 三大塊領(lǐng)域。那接下來(lái),我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過(guò)程。注意,如果白話中不小心提到相關(guān)代
  • 年輕人的“職場(chǎng)羞恥感”,無(wú)處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來(lái)源:燃次元&ldquo;人在職場(chǎng),應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個(gè)與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級(jí)寫字樓亞洲金
  • 華為HarmonyOS 4升級(jí)計(jì)劃公布:首批34款機(jī)型今日開啟公測(cè)

    8月4日消息,今天下午華為正式發(fā)布了HarmonyOS 4系統(tǒng),在更流暢的前提下,還帶來(lái)了不少新功能,UI設(shè)計(jì)也有變化,會(huì)讓手機(jī)煥然一新。華為宣布,首批機(jī)型將會(huì)在
  • 國(guó)行版三星Galaxy Z Fold5/Z Flip5發(fā)布 售價(jià)7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國(guó)發(fā)布會(huì),正式在國(guó)內(nèi)推出了新一代折疊屏智能手機(jī)三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
Top 主站蜘蛛池模板: 大同县| 织金县| 邳州市| 乌鲁木齐市| 永修县| 嘉义市| 洪泽县| 敦化市| 嘉祥县| 永年县| 太白县| 晋州市| 安新县| 南漳县| 肇源县| 仁怀市| 邯郸市| 淮北市| 临湘市| 聂拉木县| 牙克石市| 浦县| 萨迦县| 卢氏县| 石门县| 潜江市| 游戏| 青海省| 华宁县| 凤山县| 仁化县| 象山县| 深州市| 三台县| 霍邱县| 探索| 新昌县| 时尚| 万源市| 兰考县| 南宫市|