藍屏了怎麼辦?寫在開啟Windbg之旅前的話

藍屏了怎麼辦?寫在開啟Windbg之旅前的話

來自專欄 UEFI和BIOS探秘

BIOS工程師除了處理千奇百怪的硬體錯誤之外,最常碰到的頭痛問題就是藍屏了。藍屏有一萬種可能:錯誤的ACPI表,中斷沒有配置正確,驅動錯誤等等。對付藍屏最常用的武器就是Windbg了,連好了Windbg,藍屏的時候會自動停下來,等待你去解決。Windbg十分的好用,起碼比它的Linux兄弟要好用的多。有了它,很多問題就可以迎刃而解,熟練的掌握了它,不但可以調試硬體/BIOS錯誤,還可以調試驅動,甚至應用程序。也有很多同學留言希望介紹Windbg的調試技巧,我也不是Windbg的專家,只是在日常工作中有一些經驗,分享出來給大家。

在開始祭出Windbg這個大殺器之前,我們其實還有一些別的選擇。本文就介紹幾個小工具,也許你並不需要Windbg就可以解決部分藍屏的問題。

BlueScreenView

藍屏之後,系統預設會存儲系統轉儲文件。轉儲文件有三種:完整轉儲、內核轉儲和mini轉儲。三者包含內容依次減少,大小也依次減小。預設的是minidump,它被放在windows目錄下的Minidump文件夾下(例如C:WindowsMinidump),會被加入日期和序號等依次存儲。後面兩种放在windows的根目錄,默認為memory.dmp,新的會替代舊的。本文重點介紹minidump文件。

minidump文件有藍屏當時系統內核的很多關鍵信息,很多時候熟悉Windbg人會需要你提供該文件,以方便分析。如果你的系統沒有存儲minidump文件,在這裡打開:

  • 在「計算機」上點擊右鍵選擇「屬性」;
  • 在系統信息表中選擇「高級系統設置」:

  • 選擇「設置」:

  • 設置存儲文件:

這些設置好以後,以後每次藍屏,都會有minidump文件存儲下來。

有了minidump文件之後,我們可以用一個離線小工具來簡單分析這個文件:BlueScrennView。它是一個綠色免費工具:

Blue screen of death (STOP error) information in dump files.?

www.nirsoft.net圖標

打開它是這樣:

窗口上半部分是在預設位置找到的所有的minidump文件,下半部分是模擬的藍屏信息。我們可以看到是RwDrv.sys驅動造成的stop code為0x3b(SYSTEM_SERVICE_EXCEPTION)的藍屏。注意這裡的窗口內容都可以剪貼的複製。

我們可以選擇「All Drivers」形式,可以看到更多內容:

它會列出藍屏當時所有的驅動,並將當時造成藍屏原因的調用棧(call stack)上的驅動高亮,也就是我用紅框標出的部分。我們可以右鍵點擊或者雙擊看看該驅動的具體位置等等信息。

值得一提的是該軟體還有快捷鍵幫你你一鍵Google藍屏錯誤碼,不過國內不好使。

那麼這個藍屏是什麼原因呢?RwDrv.sys能不能讓你想起什麼呢?是的,是我在寫這篇文章

老狼:也許是最良心的硬體信息讀取工具:RW-everything?

zhuanlan.zhihu.com圖標

時為了演示拍圖,結果不小心輸錯了地址,RwEverything的內核驅動RwDrv.sys也沒有檢查,就直接操作,結果藍屏了。寫篇文章真不容易啊,慘。

我們也可以用它來分析別人給的文件,在這裡打開別的文件:

打開後:

這個是什麼原因?哈哈,是我為了debug一個驅動,手動生成的藍屏,所以是MANUALLY_INITIATED_CRASH,就是為了生成minidump文件。

最後要說明的是這個程序支持幾乎所有版本的Windows,從WinXP到Win10,IA32和X64。並有中文包。

WinCrashReport

一般的應用程序遇到異常會被異常處理程序捕捉,如果程序的異常處理沒有做好,系統的異常處理程序會彈出熟悉的畫面:

WinXP

Win7/Vista

我們除了知道誰死機了外幾乎沒有得到什麼有用的信息。我們可以選擇使用WinCrashReport:

Displays a report about crashed Windows application?

www.nirsoft.net圖標

它會告訴我們豐富的多的內容:

其中有幾個比較有意義:

  • Strings in the stack: 會將棧上的字元串顯示出來,很多時候會給你一些提示。
  • Call Stack
  • Modules List
  • All Threads
  • Full Stack Data

有了這些數據,又是並不需要跟蹤,也能猜出個大概。

藍屏惡作劇工具

想不想弄一大片藍屏嚇嚇你的朋友?

這裡我找了個腳本(並不是我寫的,忘了哪裡來的,版權歸原作者

@echo offecho ^<html^>^<head^>^<title^>BSOD^</title^>> bsod.htaecho. >> bsod.htaecho ^<hta:application id="oBVC" >> bsod.htaecho applicationname="BSOD" >> bsod.htaecho version="1.0" >> bsod.htaecho maximizebutton="no" >> bsod.htaecho minimizebutton="no" >> bsod.htaecho sysmenu="no" >> bsod.htaecho Caption="no" >> bsod.htaecho windowstate="maximize"/^> >> bsod.htaecho. >> bsod.htaecho ^</head^>^<body bgcolor="#000088" scroll="no"^> >> bsod.htaecho ^<font face="Lucida Console" size="4" color="#FFFFFF"^> >> bsod.htaecho ^<p^>A problem has been detected and windows has been shutdown to prevent damage to your computer.^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>DRIVER_IRQL_NOT_LES_OR_EQUAL^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>If this is the first time youve seen this stop error screen, restart your computer, If this screen appears again, follow these steps:^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>Check to make sure any new hardware or software is properly installed. If this is a new installation, ask your hardware or software manufacturer for any windows updates you might need.^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>If problems continue, disable or remove any newly installed hardware or software. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable components, restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode.^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>Technical information:^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>*** STOP: 0x000000D1 (0x0000000C,0x00000002,0x00000000,0xF86B5A89)^</p^> >> bsod.htaecho. >> bsod.htaecho. >> bsod.htaecho ^<p^>*** gv3.sys - Address F86B5A89 base at F86B5000, DateStamp 3dd9919eb^</p^> >> bsod.htaecho. >> bsod.htaecho ^<p^>Beginning dump of physical memory^</p^> >> bsod.htaecho ^<p^>Physical memory dump complete.^</p^> >> bsod.htaecho ^<p^>Contact your system administrator or technical support group for further assistance.^</p^> >> bsod.htaecho. >> bsod.htaecho. >> bsod.htaecho ^</font^> >> bsod.htaecho ^</body^>^</html^> >> bsod.htastart "" /wait "bsod.hta"del /s /f /q "bsod.hta" > nul

將它存儲成bat文件,雙擊會調用HTML容器主機顯示個全屏的藍屏,比較嚇人。你可以修改其中的內容為你想要的任何值。

這個腳本有個問題,就是只之適用於800×600的屏幕,解析度高了就很奇怪,嚇不了人了。可以選擇將這個:

<!DOCTYPE html>

<html>

<head>

<title>Fake BSOD</title>

<HTA:APPLICATION ID="oHTA"

APPLICATIONNAME="BSOD"

BORDER="none"

BORDERSTYLE="none"

CAPTION="no"

ICON="Icon/Icon.ico"

MAXIMIZEBUTTON="no"

MINIMIZEBUTTON="no"

SCROLL="no"

SHOWINTASKBAR="no"

SINGLEINSTANCE="yes"

SYSMENU="yes"

VERSION="0.4"

WINDOWSTATE="maximize"

>

</head>

<body>

<div stylex="height: 1000px">

<img src="Win8.png" alt=" " stylex="width: 100%;max-height: 100%" />

</div>

<style type="text/css">

body {

background-color: #000082;

}

</style>

</body>

</html>

存儲成.hta文件。並將任意藍屏圖存儲成Win8.png文件。雙擊後就會看到藍屏了:

當然也可以將圖片存成背景並隱藏圖標。或者直接訪問一些搞笑網站:

Prank your Friends, Family and Coworkers!?

fakebsod.com

後記

接下來我會分成幾個部分介紹Windbg:

  1. 準備工作和書籍推薦。
  2. 開門三板斧和一些常用命令。
  3. case study

如果受歡迎,我就多寫一些,如果應者寥寥就少些點,沒催哦。

歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!

用微信掃描二維碼加入UEFIBlog公眾號

推薦閱讀:

程序邏輯錯誤的調試--以獎學金計算題目為例
消防工程師案例分析:應急照明如何調試
在windbg中細究函數調用
新買的注塑機該怎麼調試?
使用IDA調試SO脫殼,環境準備及各步驟原理詳解

TAG:計算機科學 | 軟體調試 | 操作系統 |