Windbg 調(diào)試VC程序

windbg中的調(diào)試指令有三種: ?http://www.360doc.com/content/16/1110/14/30953065_605412205.shtml

1. 基本命令: 調(diào)試器自帶喇聊,提供最基本的調(diào)試功能鞍爱,不區(qū)分大小寫。 例如 bp ,g ?,dt ,dv ,k固惯,s等

2. 元命令:調(diào)試器自帶,以“.”開頭. 提供基本命令沒有提供的功能缴守。例如 .reload ?.sympath等

3. 擴(kuò)展命令:外部加入的命令葬毫,以“!”開頭屡穗。用于擴(kuò)展某一方面的調(diào)試功能贴捡,其實現(xiàn)在動態(tài)加載的模塊中。例如:!analyze

使用村砂;分隔符烂斋,可以在一行輸入多個命令。使用 ctrl + break 可以終止一個命令础废。當(dāng)輸入框顯示為busy時汛骂,即使輸入框可以輸入命令,輸入的命令也不會立刻執(zhí)行评腺。

一. windbg 啟動調(diào)試的辦法

分為兩種:

1. 命令行方式啟動:(又分為打開和附加兩種方式)

windbg ?- i ? ? ? ?// 將windbg設(shè)置為默認(rèn)調(diào)試器

windbg “notepad” ?arguments ? //使用windbg 啟動notepad調(diào)試帘瞭,設(shè)置啟動參數(shù)

windbg -p ?4200 ? ?//使用windbg 附加到一個正在運行的PID = 4200的進(jìn)程

windbg -pn "notepad" ?//使用windbg附加到一個正在運行的名字為"notepad"的進(jìn)程

2. 圖形界面方式:直接運行windbg.exe


二. 常用的元命令

1. ? .restart ? ? ?//重啟并調(diào)試

2 ? .kill ? ? ? ? ? ? //強(qiáng)制結(jié)束當(dāng)前調(diào)試

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

4. ? .hh ? ? ? ? ? ?//打開windbg ?chm幫助文檔


三. 常用基本命令

1. ?搜索命令

? ? ? ?s?-a?0012ff40?L0x20?"Hello" ? ? //搜索ansi字符串“hello”, 從0012ff40地址開始歇僧, 長度是 0x20的范圍。即搜索范圍是 0012ff40~ 0012ff60.

?2. ?斷點命令

? ? ? bp?0040108c ? ? ? ? ? ? //直接在地址下斷

? ? ??bp test1!Max ?锋拖; bp ?Max ? ? ? ? ?//直接在函數(shù)名上下斷

? ? ? bp ?'test1.cpp:30' ? ? ? ? ? ? ? ? ? ? ? ? //在test1.cpp第30行下斷

? ? ? bp ?CObject::CObject ? ? ? ? ? //在CObject構(gòu)造函數(shù)上下斷

? ? ?bp ? kernel32!CreateFileA ? ? ?//在kernel32.dll模塊CreateFileA函數(shù)頭位置下斷

? ? ?bp ?TestCommand!CObject::add ? //在TestCommand.dll模塊的CObject類函數(shù)add頭部下斷诈悍。

? ? ?bp?`ConsoleTest.cpp:40`?".if (poi(pVar)>5) {};{g}"

? ? ? //?".if (Condition) {Optional Commands}; {g}" ? ?條件斷點 pVar指針指向的值>5,執(zhí)行空語句(;)兽埃,斷住 ?否則繼續(xù)執(zhí)行

? ? ? bu ?test1!Max ?侥钳;bu ?Max ? ? ? ? ?//在函數(shù)的開頭下斷

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

? ? ?ba w4 0x0483dfe0//?當(dāng)對0483dfe0地址寫操作時停下柄错,前面要帶上0x舷夺,否則會報錯。

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

? ? ? ? ? ?//這個指令比較強(qiáng)大售貌,可以下內(nèi)存訪問给猾,寫入以及執(zhí)行斷點。 ?內(nèi)存大小Size :單字節(jié)颂跨, 雙字節(jié)敢伸,4字節(jié),8字節(jié)恒削。

?3. 斷點管理

bl ? ? ? //?列出所有斷點 ? ? breakpoint ?list

bc * ? ? //?清除所有斷點 ? ?breakpoint ?clear

bc 1 ? ? //?清除1號斷點

bc 1 2 5 ? ? ?//?清除1號池颈、2號尾序、5號斷點

be * ? ? ? //?啟用所有斷點 ? breakpoint ??enable

be 1 ? ? ?//?啟用1號斷點

be 1 2 5 ? ? //?啟用1號、2號躯砰、5號斷點

bd * ? ? ?//?禁用所有斷點 ??breakpoint ?disable

bd 1 ? ? //?禁用1號斷點

bd 1 2 5 ? ? ?//?禁用1號每币、2號、5號斷點

4. 斷點執(zhí)行

g ? ? ? //?Go(F5)

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

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

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

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

?t ? ? ? ?//?Step into(F11) 【Trace】

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

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

5. ?進(jìn)程相關(guān)

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

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

6. ?線程相關(guān)

~ ? ? ? //?列出線程

~* ? ? ? // 所有線程

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

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

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

~0s ? ? ?// 查看主線程

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

7. ?模塊相關(guān)

lm ? ? //列出進(jìn)程加載模塊?

8. 查看變量

dt ? ? i_c ? ? ? ?//查看變量地址琢歇, 類型兰怠, 值

dt ntdll!* ? ? ?//?顯示ntdll里的所有類型信息

dt ?*!*IMAGE_DOS* ? ??// 顯示所有模塊中含有IMAGE_DOS字符的類型信息

dt myApp!g_app ? ? ? ? ? ? // 表示顯示myApp進(jìn)程里全局變量g_app的內(nèi)存布局

dt WindbgTest!CTest ? ? ? // 查看模塊WindbgTest的CTest的內(nèi)存布局

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

?dt this ? ? ? ? ? ? ? ? ? //?查看this指針的類型及成員變量

dt ?-v ? _PEB @$PEB ? ? ? ? ? // 使用詳細(xì)模式查看PEB(process's environment block)內(nèi)存結(jié)構(gòu)

dt ? tagMSG 0x0336e54c ? ? ? ? ? ? ?// 類型要使用tagMSG,不能使用typedef產(chǎn)生出的MSG

typedef ?struct ??tagMSG{

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG, *PMSG;

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

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

x ? ? ? ? ? ? ?//顯示當(dāng)前函數(shù)內(nèi)所有局部變量?痕慢,函數(shù)參數(shù)的值, 包括變量地址涌矢、

x ? nCount ??//?查看局部變量nCount的值 和地址


9. ?查看堆棧

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

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

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

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

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

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

kd ? ? ? ? // 打印堆棧的地址

dds ? ? ? ?//顯示棧幀

10. 顯示反匯編

u ? ? ?//顯示當(dāng)前eip位置往后的8條指令

uf CTest::add ? ?// 反匯編CTest類的add函數(shù)

uf /c main ? ? ? ? // 反匯編main函數(shù)励负,通過/c可以查看main函數(shù)中的函數(shù)調(diào)用(call)都有哪些

ub?000c135d?L20 ? ? ? ? ?// 查看地址為000c135d指令前的20條指令內(nèi)容


11. ?顯示寄存器

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

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

r eax=5, edx=6 ? ? ? //?對寄存器eax賦值為5匕得,edx賦值為6


12. 顯示內(nèi)存

!address ? ? ? // 查看進(jìn)程的所有內(nèi)存頁屬性

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

dd /c 5 7c801e02 ? ? ?// 從7c801e02內(nèi)存處開始以dword為單位顯示內(nèi)存(寬度為:5)

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

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

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

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

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

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

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

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

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

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

.writemem D:\Test\0041a5e4.bin 0041a5e4 L0x1000 ? // 將內(nèi)存地址處0x0041a5e4后面0x1000長度的內(nèi)容拷貝存儲到D:\Test\0041a5e4.bin中

13 查看堆

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

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

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

14. 虛擬內(nèi)存

!vadump ? // 查看虛擬內(nèi)存布局

15. 查看句柄

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乞榨,一起剝皮案震驚了整個濱河市秽之,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吃既,老刑警劉巖考榨,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鹦倚,居然都是意外死亡董虱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愤诱,“玉大人云头,你說我怎么就攤上這事∫耄” “怎么了溃槐?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長科吭。 經(jīng)常有香客問我昏滴,道長,這世上最難降的妖魔是什么对人? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任谣殊,我火速辦了婚禮,結(jié)果婚禮上牺弄,老公的妹妹穿的比我還像新娘姻几。我一直安慰自己,他們只是感情好势告,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布蛇捌。 她就那樣靜靜地躺著,像睡著了一般咱台。 火紅的嫁衣襯著肌膚如雪络拌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天回溺,我揣著相機(jī)與錄音春贸,去河邊找鬼。 笑死遗遵,一個胖子當(dāng)著我的面吹牛萍恕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓮恭,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼雄坪,長吁一口氣:“原來是場噩夢啊……” “哼厘熟!你這毒婦竟也來了屯蹦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤绳姨,失蹤者是張志新(化名)和其女友劉穎登澜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飘庄,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡脑蠕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谴仙。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡迂求,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晃跺,到底是詐尸還是另有隱情揩局,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布掀虎,位于F島的核電站凌盯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烹玉。R本人自食惡果不足惜驰怎,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望二打。 院中可真熱鬧县忌,春花似錦、人聲如沸址儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莲趣。三九已至鸳慈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喧伞,已是汗流浹背走芋。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留潘鲫,地道東北人翁逞。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像溉仑,于是被迫代替她去往敵國和親挖函。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 在做前端開發(fā)時浊竟,我們需要用到一些調(diào)試工具用來調(diào)試我們的HTML怨喘、CSS或者JS代碼,俗話說預(yù)先善其事必先利其器振定,這...
    Rella7閱讀 23,910評論 0 15
  • 程序調(diào)試的基本思想是“分析現(xiàn)象->假設(shè)錯誤原因->產(chǎn)生新的現(xiàn)象去驗證假設(shè)”這樣一個循環(huán)過程必怜,根據(jù)現(xiàn)象如何假設(shè)錯誤原...
    Manfred_Zone閱讀 16,512評論 0 26
  • 和獺兔君踩馬路,一時興起去逛新會路后频。新會路是東起江寧路西至膠州路的一條不長的馬路梳庆。 該地房屋新舊雜糅暖途,水泥路面嚴(yán)肅...
    Teacher桃貓?zhí)剿?/span>閱讀 189評論 0 0
  • 我是從什么時候喜歡上你的驻售? 從你第一次無意間瞥向我的時候。 從別人經(jīng)常的跟我提起你的時候更米。 從你稚嫩的說有你在的時...
    呂中中閱讀 955評論 0 0
  • 靜夜芋浮,是誰在輾轉(zhuǎn)未眠。遠(yuǎn)處飄來的幾聲輕輕嘆息壳快,深深淺淺的撥開你的痕跡纸巷。而房間里的煙味,就像吻你時你嘴里的味道眶痰。 月...
    未成熟的閱讀 266評論 0 0