国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析

這篇具有很好參考價(jià)值的文章主要介紹了記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一:背景

1. 講故事

為什么要提 宇宙射線, 太陽耀斑 導(dǎo)致的程序崩潰呢?主要是昨天在知乎上看了這篇文章:莫非我遇到了傳說中的bug? ,由于 rip 中的0x41變成了0x61出現(xiàn)了bit位翻轉(zhuǎn)導(dǎo)致程序崩潰,截圖如下:

記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析
記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析

下面的評論大多是說由于 宇宙射線,這個(gè)太玄乎了,說實(shí)話看到這個(gè) 傳說bug 的提法,我還是挺興奮的,畢竟在我的分析旅程中,我也是真的遇到過,這篇就拿出來給大家分享吧,當(dāng)時(shí)百思不得其解,真的是無語死了。

這位朋友找到我的時(shí)候,說程序會(huì)出現(xiàn)偶發(fā)性崩潰,自己在網(wǎng)上也發(fā)了很多帖子來尋找答案,最后都不了了之,問題確實(shí)太玄乎了,這一篇我們就開始這個(gè)奇妙之旅吧。

二:Windbg 分析

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

找崩潰點(diǎn)比較簡單,使用windbg 自帶的 !analyze -v 命令去挖那個(gè) EXCEPTION_POINTERS 結(jié)構(gòu)體即可。


0:083> !analyze -v

CONTEXT:  (.ecxr)
rax=0000024f82c77341 rbx=000000f275dfe7f0 rcx=00007ffb05e55658
rdx=7ffb083d8c582d89 rsi=0000000000000000 rdi=000000f275dfe300
rip=00007ffb64be082f rsp=000000f275dfeaa0 rbp=000000007ffb05ee
 r8=0000024ff9bc0810  r9=deb6f5c6f59b3377 r10=1441a86c71655650
r11=ebbed78e94800000 r12=00007ffb05e55640 r13=0000000000000020
r14=0000024b26a3d9e0 r15=0000024f82c77340
iopl=0         ov up ei ng nz na po cy
cs=0033  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010a85
clr!WKS::gc_heap::background_mark_simple1+0x516:
00007ffb`64be082f 4c8b02          mov     r8,qword ptr [rdx] ds:7ffb083d`8c582d89=????????????????
Resetting default scope

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffb64be082f (clr!WKS::gc_heap::background_mark_simple1+0x0000000000000516)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000001
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: ffffffffffffffff
Attempt to read from address ffffffffffffffff

STACK_TEXT:  
000000f2`75dfeaa0 00007ffb`64be03a0     :  clr!WKS::gc_heap::background_mark_simple1+0x516
000000f2`75dfeb00 00007ffb`64be074e     :  clr!WKS::gc_heap::background_mark_simple+0x6d
000000f2`75dfeb30 00007ffb`64a45fc7     :  clr!WKS::gc_heap::background_promote+0x98
...

從卦中數(shù)據(jù)看,當(dāng)前觸發(fā)了后臺GC,并且處于標(biāo)記階段,在標(biāo)記托管堆上的對象時(shí)發(fā)現(xiàn)了有壞對象,無奈只能觸發(fā) CLR執(zhí)行引擎異常,這也說明當(dāng)前的托管堆是處于損壞狀態(tài),可以用 !verifyheap 命令驗(yàn)證一下。


0:083> !verifyheap
object 0000024f82c76b18: bad member 0000024F82C77F40 at 0000024F82C76B70
Last good object: 0000024F82C76AA0.
object 0000024f82c76ca8: bad member 0000024F82C77340 at 0000024F82C76CB0
Last good object: 0000024F82C76C58.
object 0000024f82c76fa8: bad member 0000024F82C77050 at 0000024F82C76FD0
Last good object: 0000024F82C76F88.
Could not request method table data for object 0000024F82C77050 (MethodTable: 00007FFB3C032138).
Last good object: 0000024F82C76FA8.

果然卦中的數(shù)據(jù)也驗(yàn)證了這一點(diǎn),托管堆上有三個(gè)壞對象,接下來抽一個(gè)用 !do 命令來驗(yàn)證下。


0:083> !do 0000024f82c76b18
Name:        System.Windows.Forms.TreeNode
MethodTable: 00007ffb3c431af8
EEClass:     00007ffb3c488500
Size:        168(0xa8) bytes
File:        C:\xxxx\System.Windows.Forms.dll
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
...
00007ffb3c431ed8  400263f       58 ....Forms.TreeNode[]  0 instance 0000024f82c77f40 children
...

0:083> !do 0000024f82c77f40
<Note: this object has an invalid CLASS field>
Invalid object

從錯(cuò)誤信息以及剛才卦中的數(shù)據(jù)表明 TreeNode.children 內(nèi)存布局被破壞了,這種情況大多是因?yàn)?MethodTable 不對了導(dǎo)致CLR識別不出這塊內(nèi)存的對象,可以用 dp 驗(yàn)證下。


0:083> dp 0000024f82c77f40 L4
0000024f`82c77f40  00007ffb`3c411ed8 00000000`00400008
0000024f`82c77f50  0000024f`82c56fa8 0000024f`82c57378
0:083> !dumpmt 00007ffb`3c411ed8
00007ffb3c411ed8 is not a MethodTable

從卦中的 00007ffb3c411ed8 is not a MethodTable 可以看到這個(gè)地址是錯(cuò)誤的,那正確地址是什么呢?如果有心細(xì)的朋友會(huì)看到 !do 的時(shí)候已經(jīng)顯示了正確的方法表,即 00007ffb3c431ed8

接下來仔細(xì)觀察 00007ffb3c411ed800007ffb3c431ed8 這兩個(gè)地址,會(huì)發(fā)現(xiàn)一個(gè)是 3c41 一個(gè)是 3c43,真的是無語了,截圖如下:

記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析

一般來說,這種單bit位的翻轉(zhuǎn)也不像是用 PInvoke 的方式讓 C++ 破壞了 C# 的托管堆,也不像是什么 hook 注入導(dǎo)致的,反正很神奇,為了拿更多證據(jù)可以在抽一個(gè) 壞對象 觀察下。


0:083> !do 0000024f82c76fa8
Name:        System.Windows.Forms.TreeNode
MethodTable: 00007ffb3c431af8
EEClass:     00007ffb3c488500
Size:        168(0xa8) bytes
Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
...
00007ffb3c432138  4002636       28 ...eNodeImageIndexer  0 instance 0000024f82c77050 imageIndexer
...
0:083> !do 00007ffb`3c032138
<Note: this object has an invalid CLASS field>
Invalid object

0:083> dp 0000024f82c77050 L1
0000024f`82c77050  00007ffb`3c032138

從卦中數(shù)據(jù)看:方法表 00007ffb3c03213800007ffb3c432138 也是差了一個(gè)bit位,即 3c033c43 的差別。

記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析

2. 為什么會(huì)翻轉(zhuǎn)

有些朋友可能說,你這數(shù)據(jù)是不是網(wǎng)絡(luò)數(shù)據(jù),比如有什么 糾錯(cuò)碼,海明碼 之類的,其實(shí) mt 的數(shù)據(jù)是嵌入到 image 中的,這塊數(shù)據(jù)一般在初始化的時(shí)候由 clr 構(gòu)建好,后期不會(huì)有人去改寫的,可以用 !address 看下。


0:083> !address 00007ffb3c432138

Usage:                  Image
Base Address:           00007ffb`3c431000
End Address:            00007ffb`3c434000
Region Size:            00000000`00003000 (  12.000 kB)
State:                  00001000          MEM_COMMIT
Protect:                00000004          PAGE_READWRITE
Type:                   01000000          MEM_IMAGE
Allocation Base:        00007ffb`3c400000
Allocation Protect:     00000080          PAGE_EXECUTE_WRITECOPY
Image Path:             C:\Windows\assembly\NativeImages_v4.0.30319_64\System.Windows.Forms\1534a59650e0fd08da0ed8931d9f6d5f\System.Windows.Forms.ni.dll
Module Name:            System_Windows_Forms_ni
Loaded Image Name:      
Mapped Image Name:      
More info:              lmv m System_Windows_Forms_ni
More info:              !lmi System_Windows_Forms_ni
More info:              ln 0x7ffb3c432138
More info:              !dh 0x7ffb3c400000


Content source: 1 (target), length: 1ec8

后來計(jì)劃讓朋友開啟 MDA 托管調(diào)試助手去驗(yàn)證,結(jié)果朋友給我反饋說開啟后,程序運(yùn)行特別慢,這個(gè)很好理解,如果你的程序 PInvoke 過多,確實(shí)容易引發(fā)過高的 GC,所以能不能適應(yīng)到各位的程序,還需要實(shí)際測試。

遺憾的這條路朋友沒有走通,所以尋找答案就遙遙無期了,最后也就不了了之,因?yàn)槟菚r(shí)候我認(rèn)為所有的用戶態(tài)異常都是軟件造成的。。。

三:總結(jié)

直到昨天看了這篇 莫非我遇到了傳說中的bug? 我現(xiàn)在有想法了,在下面可能的七種選項(xiàng)中:

  • 宇宙射線
  • 太陽耀斑
  • 地磁暴
  • 電離輻射
  • 硬件故障
  • 殺毒軟件
  • 內(nèi)存超頻

我覺得 內(nèi)存超頻 引發(fā)的程序不穩(wěn)定概率是最大的,不知道大家可有不同的看法?文章來源地址http://www.zghlxwxcb.cn/news/detail-760387.html

記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析

到了這里,關(guān)于記一次 .NET某工控 宇宙射線 導(dǎo)致程序崩潰分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 記一次 .NET某MES自動(dòng)化桌面程序 卡死分析

    記一次 .NET某MES自動(dòng)化桌面程序 卡死分析

    前些天有位朋友在微信上找到我,說他們的客戶端程序卡死了,讓我?guī)兔聪率鞘裁丛驅(qū)е碌模縟ump也拿到了手,既然有了dump就開始正式分析吧。 客戶端的程序卡死比較好找原因,入手點(diǎn)就是主線程,看下它此時(shí)正在做什么,可以用 k 命令。 從卦中信息看,代碼正在托管層

    2024年01月16日
    瀏覽(28)
  • 記一次javaMetaspace導(dǎo)致CPU200%的排查

    insertMotionDataByWxCallBack方法并發(fā)多(其實(shí)也沒多少,可能就3個(gè)?)就導(dǎo)致CPU200%了,本地沒法復(fù)現(xiàn)。 看報(bào)錯(cuò)是:java.lang.OutOfMemoryError: Metaspace,剛開始的時(shí)候眼挫,忽略了后面的Metaspace,只看到了OutOfMemoryError,就各種找代碼問題。 https://arthas.aliyun.com/doc/install-detail.html 然后發(fā)現(xiàn)

    2023年04月24日
    瀏覽(24)
  • 記一次etcd全局鎖使用不當(dāng)導(dǎo)致的事故

    記一次etcd全局鎖使用不當(dāng)導(dǎo)致的事故

    前兩天,現(xiàn)場的同事使用開發(fā)的程序測試時(shí),發(fā)現(xiàn)日志中報(bào) etcdserver: mvcc: database space exceeded ,導(dǎo)致 etcd 無法連接。很奇怪,我們開發(fā)的程序只用到了 etcd 做程序的主備,并沒有往 etcd 中寫入大量的數(shù)據(jù),為什么會(huì)造成 etcd 空間不足呢?趕緊叫現(xiàn)場的同事查了下 etcd 存儲數(shù)據(jù)的

    2024年02月11日
    瀏覽(22)
  • 記一次swoole連接數(shù)太多導(dǎo)致的錯(cuò)誤

    原先就有點(diǎn)擔(dān)心這個(gè)項(xiàng)目正式上線會(huì)出現(xiàn)各種問題,所以剛上線就趕緊查看日志 果然,頻繁出現(xiàn)錯(cuò)誤: WARNING Server::accept_connection(): accept() failed, Error: Too many open files[24] 這個(gè)錯(cuò)誤通常是由于操作系統(tǒng)限制了進(jìn)程能夠打開的文件句柄數(shù)量,導(dǎo)致當(dāng)前進(jìn)程無法打開更多的文件,從

    2024年02月02日
    瀏覽(30)
  • 【現(xiàn)網(wǎng)】記一次并發(fā)沖突導(dǎo)致流量放大的生產(chǎn)問題

    【現(xiàn)網(wǎng)】記一次并發(fā)沖突導(dǎo)致流量放大的生產(chǎn)問題

    目錄 事故現(xiàn)象 轉(zhuǎn)賬 業(yè)務(wù)背景介紹 背景一:轉(zhuǎn)賬流程 轉(zhuǎn)賬流程 轉(zhuǎn)賬異常處理 轉(zhuǎn)賬異常處理流程圖 背景二:賬戶系統(tǒng)合并 實(shí)際全流程: 背景三:扣內(nèi)存數(shù)據(jù)庫邏輯 背景四:調(diào)用方重試邏輯 問題定位 總結(jié) ?資料獲取方法 生產(chǎn)環(huán)境,轉(zhuǎn)賬相關(guān)請求失敗量暴增。 直接原因 現(xiàn)網(wǎng)

    2024年02月14日
    瀏覽(21)
  • 記一次 Mockito.mockStatic 泄漏導(dǎo)致的單元測試偶發(fā)報(bào)錯(cuò)排查過程

    記一次 Mockito.mockStatic 泄漏導(dǎo)致的單元測試偶發(fā)報(bào)錯(cuò)排查過程

    相信用 Java 寫過單元測試的讀者們對 Mockito 不會(huì)陌生。至于 Mockito 是什么,為什么要用 Mockito,本文不再贅述。本文記錄了一次在 Apache ShardingSphere 項(xiàng)目中,由 Mockito.mockStatic 使用不當(dāng)導(dǎo)致的單元測試偶發(fā)報(bào)錯(cuò)排查過程。 Mockito 自 3.4.0 起新增了一個(gè)方法 Mockito.mockStatic ,支持對

    2024年02月10日
    瀏覽(29)
  • 記一次BootCDN被黑產(chǎn)掛馬導(dǎo)致站點(diǎn)跳轉(zhuǎn)博彩網(wǎng)站的問題

    記一次BootCDN被黑產(chǎn)掛馬導(dǎo)致站點(diǎn)跳轉(zhuǎn)博彩網(wǎng)站的問題

    ? 近期發(fā)現(xiàn)公司某些站點(diǎn)出現(xiàn)偶爾跳轉(zhuǎn)博彩網(wǎng)站的現(xiàn)象,經(jīng)過排查發(fā)現(xiàn)該現(xiàn)象為供應(yīng)鏈投毒攻擊,BootCDN上的靜態(tài)資源無一例外均被污染, 當(dāng)外站引入BootCDN的靜態(tài)資源時(shí),如果請求攜帶的Referer頭為指定值(涉及公司隱私不便透露),User-Agent頭為手機(jī)瀏覽器UA,觸發(fā)惡意代碼注

    2024年02月08日
    瀏覽(17)
  • 記一次Git未Commit直接Pull導(dǎo)致本地代碼丟失后的挽救過程

    記一次Git未Commit直接Pull導(dǎo)致本地代碼丟失后的挽救過程

    第一次遇到這種問題,有點(diǎn)緊張... 好吧,廢話不多說,IDEA或者AndroidStudio進(jìn)入Git Uncommiteed Changes - Unstash Changes: 在彈出的Unstash Changes對話框點(diǎn)View查看代碼,如果代碼是本地丟失的代碼,那么恭喜你,又可以繼續(xù)愉快的玩耍了。 不過千萬要注意不用隨便點(diǎn)到Drop,Clear按鈕。 這

    2024年02月06日
    瀏覽(96)
  • 記一次dlopen使用問題導(dǎo)致Framework重啟,tombstones、pmap與反匯編分析(上)

    記一次dlopen使用問題導(dǎo)致Framework重啟,tombstones、pmap與反匯編分析(上)

    :Android Framework 動(dòng)態(tài)庫 動(dòng)態(tài)鏈接 Binder Android Studio一次更新后發(fā)現(xiàn)install App,設(shè)備就重啟了,跑了一遍開機(jī)動(dòng)畫但不是從開機(jī)第一屏開始重啟,tombstones內(nèi)容查看發(fā)現(xiàn)是 surfaceflinger 掛在 libbinder.so ,那install app做了什么這個(gè)不得而知,理論上有問題應(yīng)該掛的是PackageManager

    2024年04月08日
    瀏覽(25)
  • 記一次 .NET 某企業(yè)內(nèi)部系統(tǒng) 崩潰分析

    記一次 .NET 某企業(yè)內(nèi)部系統(tǒng) 崩潰分析

    前些天有位朋友找到我,說他的程序跑著跑著就崩潰了,讓我看下怎么回事,其實(shí)沒怎么回事,抓它的 crash dump 就好,具體怎么抓也是被問到的一個(gè)高頻問題,這里再補(bǔ)一下鏈接: [.NET程序崩潰了怎么抓 Dump ? 我總結(jié)了三種方案] https://www.cnblogs.com/huangxincheng/p/14811953.html ,采用

    2024年02月10日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包