64位內核第三講,Windbg的使用.以及命令


一丶驅動的調試.

編寫驅動免不了調試.所以這里介紹一下WinDbg的常用命令.

1.線程

命令 作用
~* 顯示所有線程
~. 顯示當前活動線程
~# 顯示當前異常線程
~ num 顯示第num個線程.
~ num s 切換到第num個線程
~*kb 顯示所有線程的棧

額外命令

命令 作用
.detach 取消附加你調試的進程
.attach pid 附加你想調試的進程.需要16進制的pid

2.斷點

命令 作用
bl 列出系統中已經有的斷點
bc 清除斷點例如: bc 1 -10 刪除1 -10的斷點. bc*清除全部
bd 禁用斷點,但不清除.
be 激活斷點.
bp [address][模塊名字][偏移] 下斷點 bp xxModule!DisPatchRead + 0x30
bu module!fun bu模塊名加函數下段點.
bm module!fun* 支持通配符.不支持加偏移下載.
ba [w len] [r len] [e len] address 支持下內存斷點 w寫斷點 len代表長度. address 代表在address下w len長度的內存寫斷點 r讀,e執行.
bp /p eprocess [address][func] 可以對下進程斷點,只用xx進程調用這個代碼的時候才會斷下來
bp /t ethread [address][fun] 對線程下端點.某個線程調用就能斷下來.

區別:
bp 下的斷點是死斷點.函數名字變了但斷點還是在哪里.
bu 自動跟你你的函數進行下段點.不用擔心會變.
在新的windbg中,bp失敗.會自動換成bu.

3.內存查看命令

dt命令可以查看一些結構

命令 作用
dt nt!_EPROCESS 查看nt模塊中定義的EPROCESS結構
dt nt!_EPROCESS -r 列出結構中的結構
dt nt P*xxx 通配符方式,列出所有中帶有P開頭的接結構
dt Address 結構 知道這個結構所在的地址.輸入則可以將這塊內存解釋為這個結構.
x nt!Zw 查找所有Zw開頭的函數.

內存數據類型顯示命令

命令 作用
db [address] [L number] 以一個字節顯示值和Ascii字符
dw [address] [L number] 內存按照2個字節顯示
dd [address] [L number] 內存按照4個字節顯示
dp [address] [L number] 32位下等同於dd. 64位下等同於dq
dq [address] [L number] 內存以8個字節顯示
df [address] [L number] 內存以4個字節浮點數顯示

db 0x800000 L4 以一個字節顯示內存.顯示長度為4 * sizeof(db )個
字節.

讀取內存中的指針
我們上面的d開頭的命令你只能查看這個值.這個值有可能是存儲指針.
我們除非在進行一次d命令才可以,下面的命令直接就可以

命令 作用
ddp
dpp
dqp
ddu
dpu
dqu
dda
dpa
dqa

d表示4個字節. q表示8個字節. p 32位下4個字節.64位下8個字節.
所以p是可以靈活轉化的.
所以上面的命令可以簡化為

命令 作用
dpa
dpu
dpp [len] 顯示局部變量的值
dps
dv 顯示局部變量的值,看變量的起始地址是ebp-xxx是

p: DWORD或者Qword
a: Ascii
u: UNICODE
所以上面的命令可以解析一下
如:
dpa
d: 命令前綴
p: 根據32位還是64位,分別以4個字節.或者8個字節顯示
a: Ascii嗎.
所以意思就是: 解析地址里面的值.如果是指針.則以32/64位顯示為AscII碼.

字符相關

命令 作用
da 顯示ascii值
du 顯示unicode值
ds 顯示ANSI_STRING的值
dS 顯示UNICODE_STRING的值.注意大小寫.

4.修改內存命令

命令 作用
eb [address] value 修改一個字節,很重要.可以改代碼的機器碼.
ed [address] value 修改4個字節
eD [address] value
ef [address] value 修改float內存
ep [address] value 修改指針內存
eq [address] value
ew [address] value
ea [address] value
eu [address] value
eza[address] value
ezu [address]value

關於修改內存.只需要熟悉 eb ed即可.

5.棧相關操作命令

命令 作用
kv 顯示當前棧的調用情況.顯示函數的前3個參數
!irp address 查看當前Irp的值.
kp 顯示當前棧,顯示當前函數的所有參數

ChiEbp RetAddre Args
上一層的EBP 當前函數返回地址 當前調用函數的參數

6.進程線程命令(內核命令)

命令 作用
!process 0 0 列出系統進程信息
!process 0 7 列出系統進程詳細信息
!process EPROCESS 7 列出進程詳細信息
.process /p EPROCESS 進入該進程上下文,如果不切換查看他的信息查看不到.
.thread ETHREAD 進入該線程上下文
!thread ETHREAD 查看線程結構
.logopen d:\xx.txt 開關語句. 顯示的所有內容都重定向到xx.txt
.logclose 上面設置了開關,下面就要進行關閉.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM