如果需要通過實驗來了解
windows
作業系統,免不了要
進行核心除錯,這邊文章把一些核心除錯途徑和方法羅列下。
windows 8 enterprise+ hypher v
vm - 2003 sp2
vm - 2008 r2
實驗用到的工具主要是除錯工具
windbg
,進行核心級的除錯,如何向檢視系統核心的情況,一般有四種方式,
windbglocal debug
,需要更改機器啟動設定,重啟機器。
livedebug
,需要準備兩台機器,從一台通過除錯工具連線到目標機器來除錯目標機器。
livekd
,可以幫助我們在本機或者
vm上面直接除錯。
kerneldump
,通過抓取核心
dump
來檢視記憶體狀態。
windbg
的安裝包包含在
windows wdk
或sdk
中,在安裝
sdk的過程中選擇
debug tool for windows
選項,sdk
會安裝windbg。
安裝成功後,非常關鍵的一步是配置
symbol(
符號表)
快取和網路位址,預設的路徑為
srv*your local symbolfolder*
需要設定使用者環境變數
_nt_symbol_path =srv*your local folder for symbols*
管理員啟動命令列
bcdedit /debug on
管理員啟動
windbg 選擇
file - kernel debug - local
livekd
允許我們不需要另外一台物理機就可以進行核心除錯,所以我實驗的過程中大多數時候都會用
livekd
來實現,只是在特殊的查詢可能要通過抓
kernel dump
的形式來演示,(因為
livekd
不能訪問硬體,所以硬體相關的命令在
livekd
中得不到返回結果)。
livekd
如果你的
windbg
安裝目錄為預設目錄的話,
livekd
可以自動找到相應的路徑,否則的話你需要將
livekd
拷貝到windbg
的安裝目錄下。
local machine
本機除錯直接通過管理員許可權執行命令列,轉到
livekd
所在的目錄,執行
也可以直接除錯
hypher-v的vm
虛擬機器,通過
livekd
加引數-hvl
列出所有的
hypher-v
虛擬機器名和
guid
,然後選擇要除錯的虛擬機器執行
livekd
加引數-hv
後面接虛擬機器名或
guid
來啟動除錯。
抓核心dump
的方式很多,
dump
也有三種型別可供選擇,
small memory dump
kernel memory dump
complete memory dump
先來進行一些通用的配置。
確定抓取
dump
的型別,一般我實驗只是演示檢視,可以選擇自動的方式。
確定dump檔案寫入的路徑有足夠的硬碟空間,dump的大小取決於dump的型別與記憶體使用量,如果選擇自動的話你需要保證有比記憶體大小大的硬碟空間。
notmyfault
這是最簡單的方式,通過軟體觸發中斷來生成dump檔案。
執行命令列轉到notmyfault所在的路徑下,執行命令notmyfault.exe /crash
系統藍屏,重啟,dump就生成在你配置的路徑下。預設為c:\windows\memory.dmp
鍵盤中斷
如果你用ps/2鍵盤,修改登錄檔
找到以下登錄檔子項:
hkey_local_machine\system\currentcontrolset\services\i8042prt\parameters
新增以下登錄檔項:
name :crashonctrlscroll
data type: reg_dword
value :1
如果使用 usb 鍵盤,必須建立 crashonctrlscroll 登錄檔項。
hkey_local_machine\system\currentcontrolset\services\kbdhid\parameters
新增以下登錄檔項:
name :crashonctrlscroll
data type: reg_dword
value :1
接下來,按住右邊ctrl鍵並且同時按兩次scrolllock鍵,系統藍屏重啟,dump生成在配置目錄下。
其他方式
核心除錯方法
跟普通應用程式一樣,列印資訊是最直接的除錯手段,通過列印資訊來獲得核心執行的情況和狀態。功能 通過控制台把核心資訊按照日誌級別列印出來。檢視當前的系統的列印等級 cat proc sys kernel printk 7 4 1 7這裡四個引數的意義 如下 7 當前控制台命令級別,只要小於這個的命令級...
機器學習實驗方法與原理
總共n個資料,假設為2,每次訓練集大小為n 2,每次訓練的資料量會偏小,取平均值後,由於每次訓練的資料量比較小,最終學習輸出的模型會不能很好的代表樣本的分布 欠擬合 換句話說就是偏差大。或者這麼理解,由於k折交叉驗證是使用k次訓練的結果取平均值來進行 的,如果只有兩折交叉驗證,每次對訓練集的 結果是...
Windows核心程式設計(二)核心驅動執行,除錯
由於windows數字簽名的原因,沒有簽名或者使用測試簽名的都不能放到64位系統上執行。兩個解決辦法。一 將系統設定為除錯模式 二 關閉系統的驅動簽名校驗。服務管理器 管理系統上的所有服務,建立 註冊 修改 啟動服務。所以我們編寫程式的時候,首先要開啟服務管理器。其api為 sc handle wi...