青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Windbg工作中用的不多,所以命令老是記不住,每次使用都要重新查命令,挺煩。
趁這次培訓(xùn)的機會好好測試和總結(jié)了一下,下次再用就方便多了。

在這里一起共享一下,如果有錯誤,請指正。

基本知識和常用命令

(1)       Windbg下載地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

安裝完后執(zhí)行windbg –IWindbg設(shè)置成默認(rèn)調(diào)試器

 

(2)       Windbg的命令分為標(biāo)準(zhǔn)命令,原命令和擴(kuò)展命令,輸入問號(?)可以顯示所有的標(biāo)準(zhǔn)命令的幫助信息; 元命令以一個點(.)開始,輸入.help可以顯示所有的原命令的幫助信息;擴(kuò)展命令以嘆號(!)開始。

 所有命令的具體用法可以通過F1查看Windbg的幫助文件。

 

(3)       通過設(shè)置符號文件路徑,讓Windbg自動從微軟網(wǎng)站更新系統(tǒng)Dll的符號文件

SRV*d:\symbols* http://msdl.microsoft.com/download/symbols

 

(4)       用分號(;)作為分隔符,可以在一行輸入多條命令

 

(5)       按上下箭頭可以瀏覽和選擇以前輸入過的命令

 

(6)       Ctrl+Break終止一個很長時間沒有完成的命令, Ctrl+Break也可以讓正在運行的程序暫停

 

(7)       Windbg默認(rèn)的數(shù)值進(jìn)制一般是16, 可以通過n命令查看和設(shè)置當(dāng)前進(jìn)制,所以我們一般在數(shù)值里帶上進(jìn)制, 0n(十進(jìn)制) 0x(十六進(jìn)制), 0t(8進(jìn)制), 0y(2進(jìn)制) 比如0n20表示20, 0x14表示20

 

 

(8)       可以通過問號命令(?)顯示表達(dá)式值,雙問號(??)顯示C++表達(dá)式值, 通過.cls命令清屏

 

(9)       如果x表示的一個地址, 則可以通過以下方法獲取x所指向的值

hi(x) 16 bits

low(x) 16 bits

by(x) 返回第一個byte

wo(x) 返回第一個word

dwo(x) 返回第一個dword

qwo(x) 返回第一個4 word(Quad-word)

poi(x) 返回第一個指針值

 

(10)   函數(shù)調(diào)用如果還沒開始,即一般函數(shù)入口代碼

push ebp

mov ebp, esp

還未執(zhí)行,

 

[esp+4]表示第一參數(shù)值, [esp+8]表示第二參數(shù),以此類推, [esp]表示的是返回地址

 

如果上面的入口代碼已經(jīng)執(zhí)行,則一般通過ebp來獲取函數(shù)參數(shù)和局部變量

[ebp+8]表示第一參數(shù), [ebp+0xC]表示第二個參數(shù), 以此類推,[ebp+4]表示返回地址 [ebp]表示上一堆棧楨的基地址。

[ebp-4]表示函數(shù)第一個局部變量

 

(11)   條件表達(dá)式

j<條件表達(dá)式>[Command1];[Command2]

例如bp consoletest!add "j(dwo(esp+4)==0n10) 'kv;.echo \"break\"';'g'" 表示條件斷點,如果consoletest!add的第一個參數(shù)是10, 則打印堆棧,輸出”break”, 并暫停,否則繼續(xù)執(zhí)行

 

也可用元命令代替

bp consoletest!add  ".if(dwo(esp+4)==0n10) {kv;.echo \"break\"} .else {g}"

 

(12)   上下文

上下文(Context)包括會話(Session)上下文, 進(jìn)程上下文,寄存器上下文,局部變量上下文。

會話上下文和登陸用戶帳號有關(guān)。進(jìn)程上下文和當(dāng)前調(diào)試的默認(rèn)進(jìn)程有關(guān), 寄存器上下文和當(dāng)前默認(rèn)線程有關(guān)。

局部變量上下文和當(dāng)前的堆棧楨有關(guān), 比如可以通過.frame [index] 切換當(dāng)前堆棧楨,然后通過dv 顯示當(dāng)前堆棧楨函數(shù)的局部變量(堆棧楨的index0開始,可以通過kn命令顯示堆棧楨索引)

 

(13)   保存dump文件

.dump /ma c:\test.dmp 保存full-dump

.dump /m c:\test.dmp 保存mini-dump

 

(14)   分析Dump

一般先 !analyze –v Windbg會根據(jù)上面命令自動分析,

           然后 ~* kv 打印所有線程的堆棧

 

(15)   重新加載符號文件

.reload –f [name], 強制重新加載某個模塊的符號文件

比如 .reload –f  test.dll

 

(16)   察看模塊信息

lm顯示所有模塊信息

lmf 顯示所有模塊及其路徑
lmD 顯示所有模塊詳細(xì)信息

!lmi  [module name] 顯示某一模塊的詳細(xì)信息

 

(17)   分析調(diào)試符號

X [選項] 模塊名!符號名

       比如x ntdll!dbg*顯示所有ntdll模塊中以dbg開頭的符號

            比如x test!cmyclass::init 顯示test模塊中cmyclass類中的init函數(shù)符號

 

(18)   搜索符號

ln [address] 搜索離address最近的符號名(list nearest symbols

 

(19)   事件處理

可以通過菜單Debug->Event Filter…設(shè)置

sx 顯示各個事件的代碼和目前的處理選項

sx {e|d|i|n} [command]  , e|d|i|n分別對應(yīng)Enabled, Disabled,OutputIgnore

比如 sxe ld user32.dll 表示在加載user32.dll時設(shè)置的中斷

sxr 恢復(fù)成默認(rèn)設(shè)置

 

(20)   單步調(diào)試

    g 繼續(xù)運行(go) 熱鍵F5

    t 單步越過(step over), 熱鍵F10

    p 單步進(jìn)入(step into), 熱鍵 F11

 

(21)   設(shè)置斷點(break point)

bp [address] [“command”] 設(shè)置軟件斷點。

比如 bp kernel32!CreateProcessW表示在調(diào)用這個CreateProcess時設(shè)置斷點。

比如bp kernel32!CreateFileW "du poi(esp+4); g" 表示在調(diào)用CreateFile時打印出文件路徑(第一個參數(shù)),然后繼續(xù)執(zhí)行

 

針對某線程設(shè)置斷點,只要在命令前加~線程號:

比如 ~0 bp 0x441242, 表示0號線程執(zhí)行到地址0x441242時中斷

 

ba [access size] [command]設(shè)置硬斷點。

其中,access指定訪問方式(e執(zhí)行指令, r讀取數(shù)據(jù),w寫入數(shù)據(jù))

size 表示監(jiān)視數(shù)據(jù)的大小(1, 2, 4)

比如ba r4 0x414422, 表示在地址0x414422寫入4字節(jié)數(shù)據(jù)是觸發(fā)斷點

 

(22)   管理斷點

bl 列出所有當(dāng)前斷點的狀態(tài)

bc 清除斷點, bc * 清除所有斷點, bc 0 清除0號斷點

bd 禁用某個斷點(disable)

be 打開某個斷點(enable)

 

(23)   察看堆棧

kn [frame count]察看當(dāng)前堆棧及其索引, frame count指定要顯示多少楨

kb顯示堆棧楨地址,返回地址,參數(shù),函數(shù)名等

kvkb的基礎(chǔ)上增加了函數(shù)調(diào)用約定等信息, 所以推薦用kv命令察看堆棧.

 

.frame [frame index] 將當(dāng)前堆棧切換到某個堆棧楨, 比如.frame 1 切換到第1

dv 命令察看當(dāng)前堆棧楨的局部變量

 

(24)   察看和修改寄存器

r顯示所有寄存器的值

r  eax=0x100 eax寄存器的改成0x100

 

(25)   顯示內(nèi)存區(qū)域(dump memory)

d{a|b|d|D|f|q|u|w} [range]

其中a表示ASCII碼,b表示byte, d表示DWORD, D表示double, f表示float, q表示8字節(jié), u表示Unicode String, w表示word

Range 表示地址范圍,可以用2種表示:一是起始地址加終止地址, 二是起始地址加L長度(不是字節(jié)長度,是單位長度)。

比如 dw 77e0d827 L10 表示顯示77e0d827開始的10word

比如 dd 77e0d820 77e0d844, 表示顯示 77e0d820 77e0d844之間的所有dword

比如 du 77e0d820, 表示77e0d820開始的以0結(jié)尾的字符串

 

dps [range] 顯示某一地址范圍內(nèi)的符號(display word and symobols)

 

(26)   顯示數(shù)據(jù)類型(dump symbolic type information)

dt [模塊名!]類型名

dt testApp!g_appInstance 表示顯示testApp里全局變量g_appInstance的內(nèi)存布局

dt 0x0458e850 test!CMyApp 表示將地址0x0458e850test!CMyApp類地址解析,并打印內(nèi)存布局, 所以只有私有符號才有這個功能

如果當(dāng)前堆棧楨是在某個類函數(shù)內(nèi),可以通過dt this 打印當(dāng)前類的內(nèi)促布局。

 

(27)   搜索內(nèi)存(search memory)

s –[type] range pattern

其中type, b表示byte, w表示word, d 表示dword, a表示ASCII stringu表示unicde string

Range 表示地址范圍,可以用2種表示:一是起始地址加終止地址, 二是起始地址加L長度(不是字節(jié)長度,是單位長度)。如果搜索空間長度超過256M,L?length

Pattern指定要搜索的內(nèi)容.

比如 s -u 522e0000 527d1000 "web"表示在522e0000 527d1000之間搜索Unicode 字符串”web”

比如s -w 522e0000 L0x100  0x1212 0x2212 0x1234 表示在起始地址522e0000之后的0x100個單位內(nèi)搜索0x1212 0x2212 0x1234系列的起始地址

 

(28)   修改內(nèi)存 (edit memory)

e{a|u|za|zu} address “String”

            其總zazu表示以0結(jié)尾的AsciiUnicode字符串, au則表示沒有0結(jié)尾

比如 ezu 0x445634 “abc” 表示在0x445634地址寫如unicode 字符串abc

            比如ea 0x445634 “abc” 表示在0x445634地址寫入Ascii字符串abc, 不包含結(jié)束符0

 

e{a|b|d|D|f|q|u|w} address [values]

其中a表示ASCII碼,b表示byte, d表示DWORD, D表示double, f表示float, q表示8字節(jié), u表示Unicode String, w表示word

比如eb  0x123432 0x41 0x41 0x41 表示在地址0x123432 寫入30x41

 

(29)   觀察內(nèi)存屬性

!address [address]

比如!address 0x414453, 顯示地址0x414453所在區(qū)域的內(nèi)存屬性


!heap -h 顯示所有的內(nèi)存堆(heap)

(30)   反匯編某一地址

u address, 比如u 0x410040表示反匯編地址0x410040的代碼

uf  反匯編某個函數(shù), 比如uf test!main
ub 反匯編某地址之前的代碼,比如ub 0x 
0x410040 L20

 

(31)   進(jìn)程線程控制

~*命令顯示當(dāng)前所有線程的詳細(xì)信息

~[Index]   n增加索引為Index的線程的掛起計數(shù)

~[Index]  m減少索引為Index的線程的掛起計數(shù)

比如通過~2 n 增加2號線程的掛起計數(shù)后, 執(zhí)行g命令(繼續(xù)運行), 這時2號線程會依然暫停運行。

 

~[Index]  f 凍結(jié)某一線程的執(zhí)行

~[Index] u 解凍某一線程的執(zhí)行

~[Index]  g只運行線程號為index的線程

~[Index] s 切換當(dāng)前線程

 

比如 ~2 kv; ~2 r 可以打印2號線程的當(dāng)前堆棧和寄存器

~* kv可以打印所有線程堆棧。

 

!runaway 顯示所有線程的CPU消耗

 

|. 顯示當(dāng)前調(diào)試進(jìn)程

|* 顯示當(dāng)前調(diào)試中的所有進(jìn)程

|[nIndex] s 切換當(dāng)前調(diào)試進(jìn)程

 

!peb 顯示進(jìn)程信息塊(process environment block)

!teb 顯示線程信息塊(thread environment block)

 

 

(32)   線程死鎖

!locks 顯示死鎖

!handle 列出當(dāng)前進(jìn)程所handle

!handle [index] f, 顯示某個handle的詳細(xì)信息

 

(33)   自動調(diào)試子進(jìn)程

.childdbg 0

Disable child process debugging

 

.childdbg 1

Attach child process automatically

 

(34)   腳本支持

$$>< filename 加載腳本文件,并將腳本里的換行符自動換成;(分號)

$t0~$t19為偽寄存器,可用來存儲臨時值, 使用偽寄存器時前面盡量加@符號以加快搜索

.printf 可以輸出格式化信息

as Name EquivalentLine 別名,類似define , 比如 r $t0=poi(esp+4); as $filename $t0

ad Name 刪除別名, ad*刪除所有別名

al 列出所有別名

.block {…}重新開始替換里面的所有別名

${alias}強制要求替換里面的別名, ${/v:alias}不要替換里面的別名

運用別名的腳本樣例:

bp Kernel32!CreateFileW "
r $t0=poi(esp+4)
as /mu ${/v:$fileName} @$t0
.block
{
.if( $sicmp(\"${$fileName}\", \"C:\\11.txt\")==0)
{
.echo OK
.printf \"done:%mu\", @$t0
}
.else
{
.echo error
}
}
ad ${/v:$fileName}
gc
"

 

FAQ

(1)       如何在某個窗口收到某個消息時設(shè)置斷點? 比如在我想在某窗口收到系統(tǒng)最小化消息時設(shè)置斷點,該怎么操作?

 

其實就是監(jiān)視窗口處理函數(shù)MsgProc(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0)消息:首先通過Spy察看窗口句柄, 比如為0x350d72; 通過Spy也可以看到窗口消息處理函數(shù)的地址,比如00E814DE; 察看WM_SYSCOMMAND的值(0x0112); 察看SC_MINIMIZE的值0xF020, 因此我們可以寫入如下條件斷點:

bp 0xE814DE

"j((dwo(esp+4)==0x350d72)&(dwo(esp+8)==0x0112)&(dwo(esp+0xc)==0xF020)) ‘kv’;’g’"

上面的命令表示在調(diào)用窗口函數(shù)時如果符合我們的條件,則打印堆棧(kv)并暫停,

否則繼續(xù)執(zhí)行(g).

 

 

(2)       堆棧楨的含義
     

堆棧生成原理:

堆棧從高地址向低地址生長,

__stcall__cdecl調(diào)用約定都是從函數(shù)參數(shù)的右到左壓棧.

因此調(diào)用某一函數(shù)比如int add(int a, int b) { return a + b;}

          我們調(diào)用 add(1, 2)函數(shù)時,

        從堆棧高地址到低地址依次入棧, 依次是參數(shù)2入棧, 參數(shù)1入棧,返回地址(ret address)入棧,然后跑到add函數(shù)執(zhí)行入口代碼push ebp   ,  mov ebp, esp , 即上一函數(shù)楨的基址(ebp)入棧, 然后將當(dāng)前的堆棧指針值賦給ebp(保存當(dāng)前的堆棧指針給ebp, 這樣可以用新的ebp操作當(dāng)前函數(shù)的局部變量,該函數(shù)內(nèi)部再調(diào)用某個函數(shù)時也能通過新ebp知道上一函數(shù)的基棧地址, 所有函數(shù)調(diào)用都以此類推)。

      所以從堆棧低地址到高地址依次表示ebp(上一函數(shù)的堆棧楨基址), ret address, parameter 1, parameter 2…

(3)       如何用Windbg寫高級腳本

參考http://blogs.msdn.com/b/debuggingtoolbox/archive/tags/windbg+scripts/default.aspx

 


 (4) 如何將64位Dump轉(zhuǎn)成32位
      .load wow64exts 回車
      !sw 回車

posted on 2012-06-07 19:07 Richard Wei 閱讀(23096) 評論(1)  編輯 收藏 引用 所屬分類: windbg

FeedBack:
# re: Windbg實用手冊
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久高清| 国内精品久久久久影院色| 欧美成人精品| 性欧美精品高清| 亚洲人成亚洲人成在线观看图片| 欧美午夜片在线观看| 亚洲欧美日韩天堂一区二区| 欧美成人激情在线| 亚洲影院色无极综合| 亚洲精品小视频在线观看| 亚洲国产精品www| 久久综合图片| 欧美不卡视频一区发布| 欧美精品一区二区视频| 欧美日韩一区二区国产| 国产精品美女久久福利网站| 国产婷婷色一区二区三区四区 | 亚洲综合精品| 欧美一区亚洲二区| 欧美国产日本| 国产亚洲欧美日韩在线一区| 亚洲国产婷婷香蕉久久久久久99| 一区二区免费在线播放| 香蕉久久久久久久av网站| 蜜桃av一区二区| 亚洲视频在线二区| 免费成人高清视频| 国产欧美va欧美不卡在线| 亚洲人成人99网站| 久久国产精品网站| 日韩视频一区二区| 久久一区精品| 国产日韩欧美| 亚洲在线一区| 亚洲国产欧美日韩精品| 亚洲欧美日韩国产中文| 嫩草影视亚洲| 国产欧美精品在线| 亚洲日本欧美在线| 久久久久久久网站| 一区二区三区欧美视频| 久久综合伊人| 韩国一区二区三区在线观看| 亚洲主播在线| 亚洲精选国产| 美女图片一区二区| 国产一区久久| 久久国产综合精品| 亚洲影视中文字幕| 欧美视频网址| 夜久久久久久| 亚洲欧美国产一区二区三区| 欧美国产精品日韩| 久久久久国内| 亚洲精品乱码久久久久久久久| 久久精品三级| 国产亚洲欧美一区| 久久国产精品一区二区三区| 亚洲午夜一区二区三区| 国产精品国产馆在线真实露脸| 中文国产成人精品| 亚洲精品国产日韩| 日韩一级免费| 一区二区欧美视频| 国产欧美日韩精品在线| 亚洲午夜精品一区二区| 亚洲精品久久久久久久久久久久久 | 久久在线播放| 在线观看三级视频欧美| 久久免费高清视频| 久久久一二三| 亚洲人成艺术| 亚洲九九精品| 国产精品国产馆在线真实露脸| 午夜欧美精品| 久久精品国产久精国产爱 | 亚洲一区二区三区久久| 99精品欧美一区二区蜜桃免费| 欧美日韩国产影院| 午夜精品久久久久| 久久国产主播| 亚洲精品日韩综合观看成人91| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美成人精品| 欧美日韩高清不卡| 欧美一区深夜视频| 久久一区二区三区四区五区| 99国产精品久久久| 亚洲专区欧美专区| 亚洲国产精品va在线观看黑人| 亚洲精品久久嫩草网站秘色| 国产啪精品视频| 亚洲国产欧洲综合997久久| 欧美视频1区| 麻豆成人在线观看| 欧美色综合天天久久综合精品| 久久亚洲精品中文字幕冲田杏梨| 欧美精品亚洲一区二区在线播放| 欧美一区二区三区婷婷月色 | 久久人人九九| 欧美亚州在线观看| 欧美成人免费在线| 国产伦精品一区二区三区在线观看 | 欧美在线播放一区二区| 久久久久久久久岛国免费| 久久精品国产久精国产爱| 日韩一级片网址| 久久精品亚洲一区二区| 黄网站免费久久| 欧美一区二区三区视频在线观看| 亚洲网站在线| 亚洲国产免费| 香蕉久久一区二区不卡无毒影院| 日韩视频在线一区二区| 欧美制服丝袜| 亚洲欧美美女| 欧美日韩国产不卡| 男女视频一区二区| 国产三区精品| 国产精品99久久久久久久久久久久| 亚洲国产精品一区二区久| 午夜精品久久久久久99热软件| 夜夜嗨av一区二区三区网页| 久久综合九色欧美综合狠狠| 久久久精品2019中文字幕神马| 国产精品草草| 一区二区三区国产精华| 宅男精品视频| 欧美三级黄美女| 亚洲美女在线观看| 99在线热播精品免费| 久久综合中文色婷婷| 老司机凹凸av亚洲导航| 狠狠色丁香久久婷婷综合丁香| 一本到高清视频免费精品| 国产一区二区三区黄视频| 午夜精彩视频在线观看不卡| 午夜精品三级视频福利| 国产精品丝袜91| 午夜国产精品视频| 久久精品免费播放| 国产一区在线观看视频| 久久精品国产2020观看福利| 久久人人爽爽爽人久久久| 激情综合久久| 老鸭窝亚洲一区二区三区| 欧美激情成人在线视频| 亚洲精品视频在线看| 欧美日韩国产欧美日美国产精品| 亚洲精品综合| 亚洲欧洲av一区二区| 国产精品揄拍500视频| 欧美一区二区三区视频免费| 欧美aaa级| 一区二区三区精品国产| 国产精品护士白丝一区av| 亚洲免费婷婷| 麻豆成人精品| 亚洲午夜性刺激影院| 国产精品一区二区三区四区| 性亚洲最疯狂xxxx高清| 鲁大师影院一区二区三区| 亚洲全部视频| 国产精品久久一区二区三区| 欧美在线观看一二区| 欧美国产日本韩| 亚洲在线成人精品| 尤妮丝一区二区裸体视频| 欧美激情国产精品| 午夜国产精品影院在线观看| 亚洲成人资源| 先锋影院在线亚洲| 久久久视频精品| 美玉足脚交一区二区三区图片| 亚洲成色www8888| 欧美日韩久久久久久| 欧美一级淫片播放口| 亚洲激情在线激情| 久久精品道一区二区三区| 91久久国产自产拍夜夜嗨| 国产精品日韩精品欧美精品| 老司机一区二区三区| 欧美一级精品大片| 亚洲毛片一区| 欧美成人首页| 久久激情网站| 亚洲在线视频免费观看| 亚洲精品黄网在线观看| 国产在线麻豆精品观看| 欧美天堂在线观看| 免费日韩成人| 久久国产视频网| 亚洲男女自偷自拍图片另类| 亚洲狠狠婷婷| 欧美成人国产一区二区| 久久人人97超碰精品888| 欧美亚洲网站| 亚洲永久精品国产| 9l视频自拍蝌蚪9l视频成人| 亚洲高清在线播放|