windbg符號(hào)加載和調(diào)試

驅(qū)動(dòng)文件*.sys一般在目錄:

林甸網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,林甸網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為林甸上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的林甸做網(wǎng)站的公司定做!

C:\Windows\System32\drivers

pc機(jī)上每個(gè)東西都有驅(qū)動(dòng),鍵盤(pán)、鼠標(biāo)、顯示器、cpu等等。

沒(méi)有驅(qū)動(dòng),這些東西都不能運(yùn)作,就是一堆廢品。

談一談windows驅(qū)動(dòng)調(diào)試。

使用windbg調(diào)試。

一般安裝ddk后,就安裝了windbg,在目錄

C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64里就有了windbg調(diào)試工具。

windbg命令分為標(biāo)準(zhǔn)命令,元命令和擴(kuò)展命令。

準(zhǔn)命令提供最基本的調(diào)試功能,不區(qū)分大小寫(xiě)。如:bp  g  dt  dv  k等

元命令提供標(biāo)準(zhǔn)命令沒(méi)有提供的功能,也內(nèi)建在調(diào)試引擎中,以.開(kāi)頭。如.sympath  .reload等;

擴(kuò)展命令用于擴(kuò)展某一方面的調(diào)試功能,實(shí)現(xiàn)在動(dòng)態(tài)加載的擴(kuò)展模塊中,以!開(kāi)頭。如!analyze等;

進(jìn)入調(diào)試狀態(tài)時(shí),直接回車(chē)可重復(fù)執(zhí)行上一條命令;按上下方向鍵可以瀏覽和選擇以前輸入過(guò)的命令;

 神奇的Tab鍵,進(jìn)行命令補(bǔ)全;ESC清除當(dāng)前命令輸入框中的文本;

 使用;作為分隔符,可以在同一行輸入多條命令;

當(dāng)命令提示符顯示*BUSY*時(shí),即使命令輸入框可以輸入命令,但輸入的命令不會(huì)立即被執(zhí)行,要等windbg空閑時(shí)才能執(zhí)行;

     可使用Ctrl + Break來(lái)終止一個(gè)長(zhǎng)時(shí)間未完成的命令;

一次可以執(zhí)行多條命令,命令間用分號(hào);分隔 【如:bp main;bp `test.cpp:120`】,一次打2個(gè)斷點(diǎn);

 為了保證windbg流暢運(yùn)行,在調(diào)試時(shí),盡量不要開(kāi)啟Watch、Locals、Registers、Call Stack、Processes and Threads窗口,直接用command來(lái)獲取信息;

幫助:

?   // 打印出所有標(biāo)準(zhǔn)命令

.help  // 打印出所有元命令

.hh  // 打開(kāi)windbg的chm幫助文件

.hh bp  // 打開(kāi)windbg的chm幫助文件bp命令介紹頁(yè)

command /?  // 打印命令command具體參數(shù)用法

*  // 注釋整行

$$ // 注釋?zhuān)ㄓ龅椒痔?hào)結(jié)束)

.sympath   // 查看當(dāng)前符號(hào)查找路徑

.sympath c:\symbols   // 將符號(hào)查找路徑設(shè)為:c:\symbols

.sympath+ c:\symbols  // 將c:\symbols添加到符號(hào)查找路徑集合中

.symfix // 將符號(hào)查找路徑設(shè)為:SRV*WinDbg安裝目錄\Sym*http://msdl.microsoft.com/download/symbols

.symfix f:\symbols // 將符號(hào)查找路徑設(shè)為:SRV*f:\symbols*http://msdl.microsoft.com/download/symbols

.symfix+ f:\symbols  // 將SRV*f:\symbols*http://msdl.microsoft.com/download/symbols添加到符號(hào)查找路徑集合中

.srcpath // 查看當(dāng)前源文件查找路徑

.srcpath f:\src // 將源文件查找路徑設(shè)為:f:\src

.srcpath+ f:\src  // 將f:\src添加到源文件查找路徑集合中

.exepath // 查看可執(zhí)行文件查找路徑

.exepath f:\bin // 將可執(zhí)行文件查找路徑設(shè)為:f:\bin

.exepath+ f:\bin  // 將f:\bin添加到可執(zhí)行文件查找路徑集合中

.effmach  // 查看當(dāng)前調(diào)試mode:x86、x64等

.load wow64exts  // [!load wow64exts] 加載wow64exts.dll模塊  注:!sw就是wow64exts中的命令

.unload wow64exts  // [!unload wow64exts] 卸載wow64exts.dll模塊

!sw  // [!wow64exts.sw]  在多個(gè)mode:x86、x64上進(jìn)行循環(huán)切換  注:如果win32程序在x64的mode下,會(huì)看到地址是64位的

!k  // [!wow64exts.k]  打印32位、64位堆棧

!k 5 // [!wow64exts.k 5]  打印32位、64位堆棧,棧幀個(gè)數(shù)為5

!info // [!wow64exts.info]  輸出wow64相關(guān)的PEB、TEB和TLS基本信息

!r // [!wow64exts.r]  輸出處理器當(dāng)前上下文信息

!r dumpTest!main  // [!wow64exts.r dumpTest!main]  輸出main函數(shù)地址的上下文信息

符號(hào)加載與查看

除了使用ld和.reload命令直接加載符號(hào)文件,某些使用符號(hào)的命令也可以觸發(fā)調(diào)試器來(lái)加載符號(hào),如:?;厮菝?k*)和反匯編命令(u)等。

值得說(shuō)明的是,windbg缺省使用的是懶惰式符號(hào)加載策略,當(dāng)它收到模塊加載事件時(shí),它通常是不會(huì)加載符號(hào)的,符號(hào)狀態(tài)顯示為deferred(延遲加載)。

.symopt // 顯示當(dāng)前所有符號(hào)選項(xiàng)

.symopt+ flags // 添加符號(hào)選項(xiàng)

.symopt- flags // 刪除符號(hào)選項(xiàng)

!sym noisy   // 激活詳細(xì)符號(hào)加載(noisy symbol loading)顯示

!sym quiet   // 禁止詳細(xì)符號(hào)加載顯示

ld * // 為所有模塊加載符號(hào)

ld kernel32 // 加載kernel32.dll的符號(hào)

.reload // 為所有已加載模塊載入符號(hào)信息

.reload /i // 重新加載不匹配符號(hào)的模塊【dmp文件沒(méi)有對(duì)應(yīng)的pdb時(shí)使用】

.reload /i TGame.exe // 重新加載不匹配符號(hào)的TGame.exe

.reload /f /v // f:強(qiáng)制立即模式(不允許延遲載入)  v:詳細(xì)模式

.reload /f @"c:\windows\System32\verifier.dll" // 為指定模塊加載符號(hào)信息

.reload /f TGame.exe // 為T(mén)Game.exe加載符號(hào)信息

.chain  // 顯示已經(jīng)加載進(jìn)來(lái)的模塊

x *! // 列出所有模塊對(duì)應(yīng)的符號(hào)信息

lm // 列出所有模塊(加載和未加載)對(duì)應(yīng)的符號(hào)信息

lmv // 列出所有模塊(加載和未加載)對(duì)應(yīng)的符號(hào)信息

lmvm ntdll  // 查看ntdll.dll的詳細(xì)信息(注意exe、dll等都不要帶后綴名)

x ConsoleTest!* // 列出ConsoleTest模塊中的所有符號(hào)

x ConsoleTest!add* // 列出ConsoleTest模塊中的所有add開(kāi)頭的符號(hào)

x /t /v ConsoleTest!* // 帶數(shù)據(jù)類(lèi)型、符號(hào)類(lèi)型和大小信息,列出ConsoleTest模塊中的所有符號(hào)

x kernel32!*LoadLib* // 列出kernel32模塊中所有含LoadLib字樣的符號(hào)

#進(jìn)程

|   // 列出調(diào)試進(jìn)程

|*  // 列出調(diào)試進(jìn)程

|N  // 參看序數(shù)為N的調(diào)試進(jìn)程

|Ns // 切換序數(shù)為N的進(jìn)程為當(dāng)前調(diào)試進(jìn)程

#線程

~   // 列出線程

~*  // 所有線程

~* k // 所有線程堆棧信息

~* r // 所有線程寄存器信息

~.  // 查看當(dāng)前線程

~0s // 查看主線程

~# // 查看導(dǎo)致當(dāng)前事件或異常的線程

~N  // 查看序數(shù)為N的線程

~~[n]  // 查看線程ID為n的線程

~Ns   // 切換序數(shù)為N的線程為當(dāng)前調(diào)試線程

~N f  // 凍結(jié)序數(shù)為N的線程

~N u // 解凍序數(shù)為N的線程

~N n  // Suspend序數(shù)為N的線程

~N m // Resume序數(shù)為N的線程

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

#斷點(diǎn)

bl   // 列出所有斷點(diǎn)

bc * // 清除所有斷點(diǎn)

bc 1 // 清除1號(hào)斷點(diǎn)

bc 1 2 5  // 清除1號(hào)、2號(hào)、5號(hào)斷點(diǎn)

be *  // 啟用所有斷點(diǎn)

be 1  // 啟用1號(hào)斷點(diǎn)

be 1 2 5 // 啟用1號(hào)、2號(hào)、5號(hào)斷點(diǎn)

bd *  // 禁用所有斷點(diǎn)

bd 1  // 禁用1號(hào)斷點(diǎn)

bd 1 2 5 // 禁用1號(hào)、2號(hào)、5號(hào)斷點(diǎn)

bp 7c801b00  // 在7c801b00地址處放置一個(gè)斷點(diǎn)

bp `ConsoleTest.cpp:36`  // 在ConsoleTest.cpp的36行處放置一個(gè)斷點(diǎn)

bp main // 在main函數(shù)的起始處放置一個(gè)斷點(diǎn)

bp CSecondLoader::CSecondLoader  // 在CSecondLoader的構(gòu)造函數(shù)處放置一個(gè)斷點(diǎn)

bp TestCommon! CTest::add  // 在TestCommon.dll的Test.cpp文件的CTest::add()函數(shù)起始處放置一個(gè)斷點(diǎn)

bp `ConsoleTest.cpp:40` "j (poi(pVar)>5) ''; 'g'" // j為條件表示式:條件斷點(diǎn) pVar指針指向的值>5,執(zhí)行空語(yǔ)句(;),斷住  否則繼續(xù)執(zhí)行

---------------------------------

---------------------------------

x表示的一個(gè)地址
hi(x) 高16 bits
low(x) 低16 bits
by(x) 返回第一個(gè)byte
wo(x) 返回第一個(gè)word
dwo(x) 返回第一個(gè)dword
qwo(x) 返回第一個(gè)4 word(Quad-word)
poi(x) 返回第一個(gè)指針?biāo)赶虻闹?/p>

---------------------------------

bp advapi32!RegOpenKeyExA ".echo;.printf\"RegOpenKeyExW(%p,\\\"%ma\\\",%N,%N,%p) returned: \", dwo(esp+4), poi(esp+8), dwo(esp+c), dwo(esp+10), dwo(esp+14);gu;.printf\"%N\",eax;.echo;g"  // 不斷住進(jìn)程情況下,打印所有的RegOpenKeyExA調(diào)用(打開(kāi)注冊(cè)表鍵值)

bu  // 保存斷點(diǎn),其用法和bp一樣

bm add_*  // 匹配add_開(kāi)頭的函數(shù),并在這些函數(shù)起始處都打上斷點(diǎn)

ba w4 0483dfe0 // 當(dāng)對(duì)0483dfe0地址寫(xiě)操作時(shí)停下

                          // ba [r|w|e] [Size] Addr      [r=read/write, w=write, e=execute], Size=[1|2|4 bytes]

#調(diào)試執(zhí)行控制

g  // Go(F5)

gH // 執(zhí)行g(shù)H命令強(qiáng)制讓調(diào)試器返回已經(jīng)處理了這個(gè)異常。【Go with Exception Handled】

     // 系統(tǒng)收到這個(gè)回復(fù)后會(huì)停止分發(fā)異常(因?yàn)檎{(diào)試器聲稱(chēng)已經(jīng)處理了異常),恢復(fù)調(diào)試目標(biāo)繼續(xù)執(zhí)行,

     //  但由于異常條件仍在,所以還會(huì)產(chǎn)生異常,于是再次分發(fā),WinDBG再次中斷到命令模式。

gN // 【Go with Exception Not Handled】

     // 執(zhí)行g(shù)N命令強(qiáng)制讓調(diào)試器返回沒(méi)有處理了這個(gè)異常,那么系統(tǒng)會(huì)進(jìn)一步分發(fā)該異常,

     // 如果沒(méi)有其他調(diào)試器也不處理,最后系統(tǒng)會(huì)彈出程序終止對(duì)話框。

gu  // 執(zhí)行到當(dāng)前函數(shù)完成時(shí)停下 【Go Up】

Ctrl+Break  // 暫停正在運(yùn)行的程序

p    // 單步執(zhí)行(F10)  【Step】

p 2 // 2為步進(jìn)數(shù)目

pc   // 執(zhí)行到下一個(gè)函數(shù)調(diào)用處停下 【Step to  Next Call】

pa 7c801b0b // 執(zhí)行到7c801b0b地址處停下  【Step to Adress】

t     // Step into(F11) 【Trace】

tc    // 執(zhí)行到下一個(gè)進(jìn)入點(diǎn)處停下 【Trace to Next Call】

ta 7c801b12  // 執(zhí)行到7c801b12地址處停下 【Trace to Adress】

bp advapi32!RegOpenKeyExA ".echo;.printf\"RegOpenKeyExW(%p,\\\"%ma\\\",%N,%N,%p) returned: \", dwo(esp+4), poi(esp+8), dwo(esp+c), dwo(esp+10), dwo(esp+14);gu;.printf\"%N\",eax;.echo;g"  // 不斷住進(jìn)程情況下,打印所有的RegOpenKeyExA調(diào)用(打開(kāi)注冊(cè)表鍵值)

bu  // 保存斷點(diǎn),其用法和bp一樣

bm add_*  // 匹配add_開(kāi)頭的函數(shù),并在這些函數(shù)起始處都打上斷點(diǎn)

ba w4 0483dfe0 // 當(dāng)對(duì)0483dfe0地址寫(xiě)操作時(shí)停下

                          // ba [r|w|e] [Size] Addr      [r=read/write, w=write, e=execute], Size=[1|2|4 bytes]

#調(diào)試執(zhí)行控制

g  // Go(F5)

gH // 執(zhí)行g(shù)H命令強(qiáng)制讓調(diào)試器返回已經(jīng)處理了這個(gè)異常?!綠o with Exception Handled】

     // 系統(tǒng)收到這個(gè)回復(fù)后會(huì)停止分發(fā)異常(因?yàn)檎{(diào)試器聲稱(chēng)已經(jīng)處理了異常),恢復(fù)調(diào)試目標(biāo)繼續(xù)執(zhí)行,

     //  但由于異常條件仍在,所以還會(huì)產(chǎn)生異常,于是再次分發(fā),WinDBG再次中斷到命令模式。

gN // 【Go with Exception Not Handled】

     // 執(zhí)行g(shù)N命令強(qiáng)制讓調(diào)試器返回沒(méi)有處理了這個(gè)異常,那么系統(tǒng)會(huì)進(jìn)一步分發(fā)該異常,

     // 如果沒(méi)有其他調(diào)試器也不處理,最后系統(tǒng)會(huì)彈出程序終止對(duì)話框。

gu  // 執(zhí)行到當(dāng)前函數(shù)完成時(shí)停下 【Go Up】

Ctrl+Break  // 暫停正在運(yùn)行的程序

p    // 單步執(zhí)行(F10)  【Step】

p 2 // 2為步進(jìn)數(shù)目

pc   // 執(zhí)行到下一個(gè)函數(shù)調(diào)用處停下 【Step to  Next Call】

pa 7c801b0b // 執(zhí)行到7c801b0b地址處停下  【Step to Adress】

t     // Step into(F11) 【Trace】

tc    // 執(zhí)行到下一個(gè)進(jìn)入點(diǎn)處停下 【Trace to Next Call】

ta 7c801b12  // 執(zhí)行到7c801b12地址處停下 【Trace to Adress】

# 查看句柄


!handle  // 查看所有句柄的ID


!handle 000007f8 1  // 查看ID為000007f8的句柄的類(lèi)型


!handle 000007f8 4  // 查看ID為000007f8的句柄的名稱(chēng)


!handle 0 5  // 查看所有句柄的類(lèi)型和名稱(chēng)

查看變量

===  0n(十進(jìn)制)  0x(十六進(jìn)制)  0t(8進(jìn)制)  0y(2進(jìn)制)    可以使用n [8|10|16]命令來(lái)修改數(shù)值進(jìn)制表示方式(輸入n可查看當(dāng)前進(jìn)制,默認(rèn)為16進(jìn)制)===

-- VC6.0的Link選項(xiàng)需要將/pdbtype:sept改為/pdbtype:con, 否則生成的pdb文件中將不包含如自定義結(jié)構(gòu)體,類(lèi)等信息

dt nRet  // 查看局部變量nRet的類(lèi)型與值(函數(shù)參數(shù)變量請(qǐng)用dv命令)

dt myApp!g_app // 表示顯示myApp進(jìn)程里全局變量g_app的內(nèi)存布局(注:vc6見(jiàn)上述說(shuō)明)

dt WindbgTest!CTest // 查看模塊WindbgTest的CTest的內(nèi)存布局(注:vc6見(jiàn)上述說(shuō)明)

dt WindbgTest!CTest 0x0041f8d4  // 將0x0041f8d4地址處內(nèi)容按照模塊WindbgTest的CTest的內(nèi)存布局來(lái)解析

dt this // 查看this指針的類(lèi)型及成員變量(注:vc6見(jiàn)上述說(shuō)明)

dt -b this  // 查看this指針的類(lèi)型及成員變量,如果某一成員變量為結(jié)構(gòu)體,則把其結(jié)構(gòu)成員也一一打印出來(lái)

dt _PEB @$PEB // 查看PEB(process's environment block)內(nèi)存結(jié)構(gòu)

?? this->m_nPen  // 查看成員變量的值(注:vc6見(jiàn)上述說(shuō)明)

?? this // 查看this指針中的成員變量(注:vc6見(jiàn)上述說(shuō)明)

? nCount // 顯示局部變量nCount的地址(前面4198608為10進(jìn)制表示地址,004010d0為16進(jìn)制表示地址) 形如:Evaluate expression: 4198608 = 004010d0

? HeapTest!CTest::Add  // 顯示HeapTest模塊中CTest類(lèi)中的Add函數(shù)地址

dv   // 顯示當(dāng)前函數(shù)內(nèi)所有局部變量,函數(shù)參數(shù)的值

dv n*  // 顯示當(dāng)前函數(shù)內(nèi)n開(kāi)頭的所有局部變量,函數(shù)參數(shù)的值

dv nCount // 查看局部變量nCount的值

dv a // 查看函數(shù)參數(shù)變量a的值

dv /t /i /V /a|/n|/z

/***************************************** 

更加詳細(xì)地顯示當(dāng)前函數(shù)內(nèi)所有局部變量,函數(shù)參數(shù)信息
i = type (local, global, parameter)
t = data type
V = memory address or register location
-----------------------
a = sort by Addr, n = sort by name, z = sort by size

*****************************************/

x  // 用法和dv命令一致,顯示當(dāng)前函數(shù)內(nèi)所有局部變量,函數(shù)參數(shù)的地址與值

調(diào)用堆棧

k  // 顯示當(dāng)前調(diào)用堆棧

kn // 帶棧編號(hào)顯示當(dāng)前調(diào)用堆棧

kb  // 打印出前3個(gè)函數(shù)參數(shù)的當(dāng)前調(diào)用堆棧

02a9ffec 00000000 01e511f9 0174c570 00000000 kernel32!BaseThreadStart+0x37
----------------------------------------------
kernel32!BaseThreadStart+0x37 這個(gè)是函數(shù)地址。
01e511f9 0174c570 00000000 這是前三個(gè)參數(shù)。注:如果是成員函數(shù),this指針通過(guò)ecx來(lái)傳遞
02a9ffec 00000000是 ebp 和 返回地址。

 

kb 5 // 只顯示最上的5層調(diào)用堆棧

kv   // 在kb的基礎(chǔ)上增加了函數(shù)調(diào)用約定等信息

kp  // 顯示每一層函數(shù)調(diào)用的完整參數(shù),包括參數(shù)類(lèi)型、名字、取值(必須是完整符號(hào)的情況下,private symbols);注意:若程序被優(yōu)化,這些值不一定對(duì)

kd  // 打印堆棧的地址

.frame // 顯示當(dāng)前棧幀

.frame n // 設(shè)置編號(hào)n的棧幀為當(dāng)前棧幀

.frame /r n // 設(shè)置編號(hào)n的棧幀為當(dāng)前棧幀 并顯示寄存器變量

!uniqstack // 顯示所有線程的調(diào)用堆棧

調(diào)用堆棧

k  // 顯示當(dāng)前調(diào)用堆棧

kn // 帶棧編號(hào)顯示當(dāng)前調(diào)用堆棧

kb  // 打印出前3個(gè)函數(shù)參數(shù)的當(dāng)前調(diào)用堆棧

02a9ffec 00000000 01e511f9 0174c570 00000000 kernel32!BaseThreadStart+0x37
----------------------------------------------
kernel32!BaseThreadStart+0x37 這個(gè)是函數(shù)地址。
01e511f9 0174c570 00000000 這是前三個(gè)參數(shù)。注:如果是成員函數(shù),this指針通過(guò)ecx來(lái)傳遞
02a9ffec 00000000是 ebp 和 返回地址。

 

kb 5 // 只顯示最上的5層調(diào)用堆棧

kv   // 在kb的基礎(chǔ)上增加了函數(shù)調(diào)用約定等信息

kp  // 顯示每一層函數(shù)調(diào)用的完整參數(shù),包括參數(shù)類(lèi)型、名字、取值(必須是完整符號(hào)的情況下,private symbols);注意:若程序被優(yōu)化,這些值不一定對(duì)

kd  // 打印堆棧的地址

.frame // 顯示當(dāng)前棧幀

.frame n // 設(shè)置編號(hào)n的棧幀為當(dāng)前棧幀

.frame /r n // 設(shè)置編號(hào)n的棧幀為當(dāng)前棧幀 并顯示寄存器變量

!uniqstack // 顯示所有線程的調(diào)用堆棧

寄存器

r // 顯示所有寄存器信息及發(fā)生core所在的指令

r eax, edx // 顯示eax,edx寄存器信息

r eax=5, edx=6  // 對(duì)寄存器eax賦值為5,edx賦值為6

!address 7ffd8000  // 查看7ffd8000地址處內(nèi)存頁(yè)屬性


dd /c 5 7c801e02  // 從7c801e02內(nèi)存處開(kāi)始以dword為單位顯示內(nèi)存(寬度為:5)【默認(rèn)顯示128字節(jié)長(zhǎng)度的內(nèi)容】


dd /c 5 7c801e02 L8  // 從7c801e02內(nèi)存處開(kāi)始以dword為單位顯示內(nèi)存(寬度為:5)【顯示8個(gè)dword】


da /c 100 7c80ff03  // 從7c80ff03內(nèi)存處開(kāi)始顯示Ascii字符串(寬度為:100)


du /c 100 7c8022f5  // 從7c8022f5內(nèi)存處開(kāi)始顯示Unicode字符串(寬度為:100)

/*****************************************

d[a| u| b| w| W| d| c| q| f| D] [/c 列數(shù)] [地址]

a = ascii chars
u = Unicode chars
b = byte + ascii
w = word (2b)
W = word (2b) + ascii
d = dword (4b)
c = dword (4b) + ascii
q = qword (8b)
f = floating point (single precision - 4b)
D = floating point (double precision - 8b)

*****************************************/

dyb /c 3 7c801e02  // 從7c801e02內(nèi)存處開(kāi)始,顯示byte及二進(jìn)制(寬度為:3)

dyb /c 3 7c801e02  // 從7c801e02內(nèi)存處開(kāi)始,顯示byte及二進(jìn)制(寬度為:3)

/*****************************************

dy[b | d] ..   // b = binary+byte     d = binary+dword

*****************************************/

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

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

ea 0x445634 "abc"  // 表示在0x445634地址寫(xiě)入Ascii字符串a(chǎn)bc, 不包含結(jié)束符0

eza 0x445634 "abc"  // 表示在0x445634地址寫(xiě)入Ascii字符串a(chǎn)bc, 包含結(jié)束符0

eu 0x445634 "abc"  // 表示在0x445634地址寫(xiě)入U(xiǎn)nicode字符串a(chǎn)bc, 不包含結(jié)束符0

ezu 0x445634 "abc"  // 表示在0x445634地址寫(xiě)入U(xiǎn)nicode字符串a(chǎn)bc, 包含結(jié)束符0

ed nCounter 80  // 將變量nCounter的值修改為80(注:80為10進(jìn)制還是16進(jìn)制,還是其他,取決于當(dāng)前進(jìn)制)

!heap -s// 顯示進(jìn)程堆的個(gè)數(shù)(每一項(xiàng)是一個(gè)堆,也就是_HEAP結(jié)構(gòu)指針,對(duì)應(yīng)的API是HeapCreate)

dt _HEAP 00140000  // 選取一個(gè)堆的地址,打印該堆的內(nèi)存結(jié)構(gòu)

!heap -a 00140000 // 選取一個(gè)堆的地址,打印該堆的信息,比上面打印內(nèi)存命令更詳細(xì)直觀

設(shè)置事件發(fā)生時(shí)windbg行為

設(shè)置事件發(fā)生時(shí)windbg行為
sx // 顯示windbg遇到每個(gè)異常和事件時(shí)的行為
sxr // 將所有異常和事件過(guò)濾器的狀態(tài)重設(shè)為默認(rèn)值
sxe  ld // 當(dāng)加載模塊時(shí),立即中斷(Break)到調(diào)試器中(第一次處理機(jī)會(huì))
sxe ud // 當(dāng)卸載模塊時(shí),windbg不會(huì)在第

一次處理機(jī)會(huì)時(shí)中斷(雖然會(huì)顯示信息)。如果其他錯(cuò)誤處理器沒(méi)有處理掉該異常,執(zhí)行會(huì)停止下來(lái)并中斷(Break)到windbg中(第二次處理機(jī)會(huì))

sxn et // 當(dāng)線程退出時(shí),windbg會(huì)打印出一條消息

sxi ct // 當(dāng)線程創(chuàng)建時(shí),windbg不中斷也不打印消息

dump輸出

 .dump /ma "d:\mydmpfile.dmp" // 將當(dāng)前調(diào)試進(jìn)程輸出Dump文件

其他元命令

.tlist  // 顯示所有進(jìn)程

.cls  // 清除屏幕

.logopen c:\1.log   // 將command內(nèi)容輸出到c:\1.log文件中

其他擴(kuò)展命令

!analyze -v  // 詳細(xì)顯示當(dāng)前異常信息

!peb // 格式化輸出PEB信息(process's environment block)

!gle  // 打印當(dāng)前線程最近的錯(cuò)誤信息LastError

!gle -all  // 打印所有線程的最近的錯(cuò)誤信息

!error  897// 顯示錯(cuò)誤碼為897的詳細(xì)描述信息

中文在線幫助:

點(diǎn)擊打開(kāi)鏈接

windbg cmd:

WinDbg 命令手冊(cè)

http://www.cnblogs.com/gaochundong/p/windbg_cheat_sheet.html

當(dāng)前題目:windbg符號(hào)加載和調(diào)試
路徑分享:http://muchs.cn/article22/iegijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、用戶體驗(yàn)、定制開(kāi)發(fā)、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)