分析Memory Dump基礎篇

分析Memory Dump基礎篇

相信使用 Windows 作業系統大家都有藍色畫面的經驗,

整台電腦 “當機”,這時候只有重新開機一途。

更進一步我們如果要追查藍色畫面的原因,就必須進一步收集所謂的 Memory Dump,

也就是當下電腦記憶體中所有執行的程式、執行緒、工作、開啟的檔案等等。

這篇文章主要說明如何取得 Memory Dump 並且做進一步初步的分析。

 

如何抓取完整 Memory Dump?

一個簡單的方式當然就是製造藍色畫面,但是這樣一來電腦必須要重新開機。

方法一:NotMyFault

https://download.sysinternals.com/files/NotMyFault.zip

這個工具執行時,會產生藍色畫面因此讓 windows 自動產生整個 Memory Dump。

步驟1: 設定 registry

執行這個工具之前先確定 memory dump 是否正確被設定,

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

 

CrashDumpEnabled  = 1 (這會設定產生完整的 memory dump)

 

步驟2: 執行 NotMyFault

用系統管理員權限於 Command console 下執行下列指令

NotMyFault.exe /crash

結果會出現藍色畫面,所以執行之前先確定相關的工作有存檔。

藍色畫面出現後就必須要重新開機。

所產生的 Memory Dump 預設會被存放在 %SystemRoot%\MEMORY.DMP

(PS. 藍色畫面上的特定 Error Code 是有意義的,可以根據這個 Error code 查詢錯誤的原因)

限制:這個方法不適用在 Virtual Machine

 

 

方法二:使用 WinDbg

如果不重新開機也不刻意產生藍色畫面,有什麼方式可以產生完整的 memory dump呢?

 

我們主要使用的工具是 WinDBG

首先我們必須安裝 WinDBG,可以至下列位置下載

http://msdn.microsoft.com/en-US/windows/hardware/gg463009

Microsoft Windows SDK for Windows 7 and .NET Framework 4 http://go.microsoft.com/fwlink/?LinkID=191420

安裝的時候可以指定安裝 “Debugging Tools for Windows”也就是俗稱的 winDBG

Debugging tools for Windows

screenshot

安裝完 Windbg 之後就可以利用這個工具產生 dump

工具啟動後如畫面所示,於 kd提示符號之後輸入指令

.dump   /?

(注意: dump指令前面必須要含有 . 的符號)

相關指令參數可以參考: https://msdn.microsoft.com/en-us/library/windows/hardware/ff562428(v=vs.85).aspx

 

如果要產生完整Kernel Mode Dump .dump   /f   C:\memory.dmp
如果要產生 user mode Dump .dump   /m   C:\memory.dmp
如果要產生 User mode + 其他資訊 .dump /mfh C:\memory.dmp

 

 

如何分析?

開啟 WinDbg.exe 之後

1. 設定 Symbol

File > Symbol file path > “SRV*c:\symbols*http://msdl.microsoft.com/download/symbols”

2. 開啟 Memory Dump

File >  Open Crash Dump >  ! analyze -v

如果是 Crash 的問題通常 windbg 就會給初步分析的原因。

但是如果是系統效能很慢或是應用程式無法回應的問題的話,就必須進一不釐清是否有下列狀況

  •  Infinite loop
  •  Intensive IO operations
  • Huge allocations to the Large Object Heap
  • Any intensive CPU operations.

可以參考這篇,系統無法回應 hang 問題的分析

http://blogs.msdn.com/b/rihamselim/archive/2012/03/01/debugging-2.aspx

 

方法三: 使用 VMware 工具

http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2003941

這個方式主要將 VMware 當下的 Image Suspended

再利用VMware 工具 vmss2core將該 Suspended Image 轉換為Memory Dump

缺點是當系統有問題的時候那當下或許沒有辦法 Suspended.

因此這種情況下,可以利用方法二利用 Windbg 工具產生。

 

Kernel Dump 分析

如果要分析這樣的 Memory Dump,可以使用 Windbg > File > Open Crash Dump

Kernel dump的分析 有下列指令可以使用:

 

 

 

進階分析參考資料

http://blogs.msdn.com/b/rihamselim/archive/2012/02/25/windbg-debugging-2.aspx

http://blogs.msdn.com/b/rihamselim/archive/2012/03/01/debugging-2.aspx

http://blogs.msdn.com/b/rihamselim/archive/2012/03/08/debugging-3.aspx

http://blogs.msdn.com/b/rihamselim/archive/2012/03/14/windbg-quickstart-guide-part-4-debugging-unexpected-program-behaviour.aspx

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *