Windbg常用命令

2022-07-17 21:48:15 字數 3386 閱讀 3087

1.啟動

1)直接除錯:

gdb program [core]

cdb program or cdb -z dumpfile

2)attach方式

gdb attach pid

cdb -pn exename or cdb -p pid

2.顯示堆疊

gdb: bt

cdb: k

3. 設定斷點

gdb: b [file:]line

cdb: bp 'file:line'

4. 執行/繼續執行

gdb: run [arglist]

c 繼續執行

cdb: g

5. 單步

gdb : n (step over) s (step into)

cdb : p

6. 列印變數的值

gdb : p expr

cdb: ? expr

說老實話,cdb過於複雜,學起來比gdb難.

btw:用cdb之前設定一下symbol的path

set _nt_symbol_path=srv*c:\symbols*

運用windbg進行核心除錯, 熟練的運用命令列是必不可少的技能. 但是面對眾多繁瑣的命令, 實在是不可能全部的了解和掌握. 而了解kernel正是需要這些命令的指引, 不斷深入理解其基本的內容. 下面, 將介紹最常用的一些指令, 使初學kernel除錯的朋友們能有乙個大致的了解. 至於如何熟練的運用它們, 還需要實際的操作過程中進行反覆的琢磨.

windbg能夠方便的進行遠端除錯和本地程序除錯(只限於user模式), 遠端除錯又分user mode和kernel mode兩種. 個人認為用windbg進行遠端的user mode除錯還不如用visual studio來的方便, 畢竟要一些相應的配置才行, 而visual studio只需要遠端機器的ip位址即可.(當然, 如果你在livecd或winpe下進行user mode的除錯, 這時候沒有vs, windbg就是不二之選了). windbg的優勢就在於遠端的kernel模式的除錯, 這是vs所做不到的.

1. 首先是設定符號路徑(無論在user mode下還是kernel mode下都需要), 在windbg的符號路徑對話方塊中, 輸入以下符號路徑:

srv*c:\symbols*

這個符號路徑是自動在微軟給定的symbols路徑下進行自動搜尋, 一些常用的符號都可以利用這個鏈結自動找到. 當然, 如果你的本地已經有相應的符號路徑, 包含本地的也可以.

2. 等windbg的聯機狀態設定好後, 按下ctrl+break, 中斷當前的kernel狀態, 在windbg的命令列視窗輸入"?", 則會輸出幫助選單, 在這個menu中會顯示一些常用的命令:

(1)斷點指令

b[c|d|e]

clear|disable|enable breakpoints

bllist breakpoints

bp set soft breakpoints

ba break on access

(2)資料檢視指令

d[type]

dump memory

dt [-n|y] [[mod!]name] [[-n|y]fields][address] [-l list] [-a|c|i|o|r[#]|v]

dump using type information

dv  

dump local variables

(3)資料修改指令

e[type]

enter memory values

(4)執行

g[h|n] [=[...]] 

gop [=]

step over

(5)堆疊操作

k[b|p|p|v]

(6)顯示載入的模組列表

lmlist modules

(7)暫存器操作

r [[[= ]]]

view or set registers

(8)search指令

s search memory

(9)跟蹤指令t,ta,tb,tc,wt,p,pa,pc

(10)退出

q(11)反彙編

u其中最常用的就是反彙編操作和顯示模組操作. lm命令顯示當前載入的模組. 當你連線過程中, windbg提示相應的module找不到時, 就可以運用這個命令進行檢視. lm的乙個擴充套件命令是"lm t n", 這個命令顯示當前所有載入的驅動資訊(過去的命令是!driver),在除錯核心驅動的過程中非常有用,可以找到相應驅動的起始位址。反彙編命令u, 可以在相應的位址中逐步的解析**,這在核心除錯中是最常用的一種檢視**的方式。

除上面的一些基本命令之外,還有一些非常有用的指令:

(1)k[kb|kp]

顯示當前的堆疊,當然也可以用alt+6直接調出視窗顯示

(2)!process

顯示當前的程序exprocess狀態,!process 0 0 顯示所有的程序狀態

(3)!thread

顯示當前的執行緒狀態,dt nt!_ethread顯示ethread結構

(4)!drvobj [path]

列出當前的驅動程式在驅動物件中的例程,其中path是驅動的裝置路徑,例如: !drvobj \filesystem\fat 2 列出fat檔案系統驅動的例程

(5)dt nt!_*

檢視核心的資料結構

(6)!stack 0

顯示執行緒當前位址

(7)!ioapic

檢視i/o的中斷控制器

(8)!irql

檢視cpu的irql,這在cpu中斷除錯中非常有用

(9)!exqueue

可以看系統輔助的執行緒列表

(10)!reg viewlist

登錄檔的儲存顯示,!reg hivelist顯示登錄檔乙個儲存的記憶體使用量

(11)!vm

顯示系統的記憶體池資訊

(12)dt _token

顯示內部訪問令牌

(13)!object \device

顯示裝置物件資訊,用winobj工具也可以看到

以上命令是一些常用的核心除錯命令, 還有非常多的命令技巧, 不可能全部一一解釋. 在今後的文章, 還會結合具體的除錯過程分析進行逐步介紹. 核心的除錯無非是處理器, 系統裝置, 記憶體, 程序執行緒, 登錄檔, 驅動這幾大類的資訊, 每一類都有很多的命令, 需要我們在實際的除錯過程中不斷認識和體會它的用法. 當然, 理解這些命令用法的前提是需要我們對作業系統內部構造有乙個清晰的認識. 這需要不斷的學習, 對os有乙個全域性的把握, 這樣才能更深入的理解它. 而通過windbg的核心除錯, 我們有一種更好的方式直接與kernel打交道, 這對我們深入理解和認識作業系統有很大的幫助. 下一節我們將通過乙個實際的除錯driver的例子, 來進一步認識windbg在核心除錯中的作用.

**:

Windbg常用命令

在windbg的命令列視窗輸入 則會輸出幫助選單,在這個menu中會顯示一些常用的命令 1 斷點指令 b c d e clear disable enable breakpoints bl list breakpoints bp set soft breakpoints ba break on ac...

windbg常用命令

2.斷點 斷點之於除錯當然是非常重要的 常用命令 bp address or symbol 在指定位址下斷 可以使用位址或符號,如 bp 80561259 windbg預設使用16進製制 bp mydriver getkernelpath bp mydriver getkernelpath 0x12...

windbg常用命令

1.檢視執行緒 ring3 顯示當前執行緒.顯示所有執行緒 顯示異常執行緒 2 選擇2號執行緒 1 kb 顯示1號執行緒棧資訊 2.斷點 bp addr module fun 支援位址和模組斷點 bp p proc 程序斷點 bp t thread 執行緒斷點 bu module fun 模組斷點 ...