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

大龍的博客

常用鏈接

統計

最新評論

Windbg簡明教程

 



Windbg是Microsoft公司免費調試器調試集合中的GUI的調試器,支持Source和Assembly兩種模式的調試。Windbg不僅可以調試應用程序,還可以進行Kernel Debug(新版本對于XP+操作系統支持Live kernel debug),同時結合Microsoft的Symbol Server調試應用程序和Kernel非常得利。Windbg支持x86,IA64,AMD64。
Windbg下載地址:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
下面我來說一下Windbg的基本用法:
基本設置
由于Windbg是GUI調試器,所以在設置方面可以通過菜單,也可以通過命令。我只說明最方便的辦法:),那請先打開Windbg吧
符號路徑設置,Ctrl+S在彈出的窗口中輸入你的符號路徑,路徑的格式只要符合Windows操作系統路徑格式即可,路徑可以多個,中間以分號間隔,如:d:\symbols\win2k3_en;個人感覺Windbg的強大功能之一在于Windbg會自動到Microsoft的服務器上下載符號表文件(.dbg或.pdb,有時DLL和EXE也會下載),只要在符合表路徑里做如下設置:srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols,這樣如果相關符號表在d:\symbolslocal目錄沒有找到的話,Windbg會自動在Microsoft的Symbol Servers上下載。如果你是調試自己的應用程序的話,建議你將自己應用程序的*.pdb文件的路徑放在前面這樣對Windbg來說查找起來比較快。
源文件路徑設置:Ctrl+P在彈出的窗口里指定你的源代碼文件的路徑,路徑格式只要符合Windows操作系統的格式即可,可以指定多個,中間以分號間隔。
可以將你的設置進行保存,File->Save Workspace。
開始調試
可以創建一個子進程進行調試,也可以對正在運行的程序進行調試,方法如下:Ctrl+E打開一個應用程序并可指定運行參數進行調試;F6從對話框中選擇當前正在運行的進程調試。
對于調試子進程,通常Windbg會在應用程序運行之前中斷,此時你可下一些想要的斷點:
以Notepad.exe為例,如果你還沒有符號表文件的而又設置了MicrosoftSymbol Servers的話,你得先等一下,因為Windbg會自己自動到Microsoft上下載相關的符號表,在命令提示符的位置如果沒有出現0:000>這個標記表示Windbg正在忙。
表達式格式:
無論在那條指定里都會涉及這個問題:數制,語法。Windbg支持C++和MASM兩個表達式格式,@@用于即時改變語法格式,即在MASM下使用@@指令來使用C++的語法解釋器,反之亦然。Windbg數制的表示0x表示16進制,0n表示10進制,0t表示8進制,0y表示2進制;Windbg默認數制為16進制,n指認用于設置數制;默認表達式語法是MASM,.expr 指令用于設置表達式語法解釋器。本文均使用MASM為默認語法解釋器。大小問題,通常如果不特別說明,Windbg對指令不區分大小
斷點指令:BP,BM,BA,BL,BC,BD,BE
BP 在指定的地址設置斷點
bp notepad!WinMain,在Notepad的WinMain函數處下斷點。
斷點的位置可以用符號表示,也以直接使用地址及Windbg的Pseudo-Register(虛擬寄存器),如$exentry表示進程的入口點,可以使用bp @$exentry在進程的入口點設置斷點,對于Notepad當前入口點為01006420,也可以直接 bp 01006420,等效于bp notepad!WinMainCRTStartup.
BM 使用模式匹配設置斷點,需要符號表支持
bm值一提,在符號表合法的情況下(符號表中包含私有符號的時候),bm可能通過模式一次下多個斷點,bm mydriver!FastIo*指定可以將所有與FastIo*模式相匹配的函數下斷點,如FastIoRead,FastIoWrite等。但是bm需要full or export symbols支持,Microsoft的提供的符號表不是都支持的,通常我們自己編譯的程序的符號表(Windbg顯示為private pdb symbols)默認是支持的。
BA (Break on Access)
顧名思義,對內存訪問下斷點。對于在多核或多處理器調試的時候很有用,對于調試多線程也很有用,應該說用處很多,比如對一個全局變量設置斷點,ba mydriver!gMonitoredDevices,如果如果你認為這個變量的值被莫名的修改了,相信通過BA設置的斷點,你很快就能找到是誰修改的。
BL(List),BC(Clear),BE(Enable),BD(Disable)
  這四個指令是分別用于列表,清除,開啟和禁用斷點,也是使用非常頻繁的指令。
條件斷點
  以上所提到的斷點指令通過與J指令很容易形成條件斷點。比如:
bp USER32!GetMessageW "r $t1=poi(esp+4);r $t2=poi(@$t1+4); j(@$t2 = 0x102 ) 'du @$t1+8 L2;gc';'gc'"
這個條件斷點,截取WM_CHAR消息,并將字符(包括中文)顯示出來。
條件斷點的最簡形式:bp Address "j (Condition) 'OptionalCommands'; 'gc' "
Address是指令的地址,Condition是一個條件表達式,如果@eax=1,'OptionalCommands'是在斷點被擊中并且表達式成立時要執行的指令;gc指定是從一個條件斷點返回,是不可少的一部分。
數據查看指令 d{a|b|c|d|D|f|p|q|u|w|W}
d{b|c|d|D|f|p|q}分別是顯示:
byte&ASCII, double-word&ASCII,double-word,double-precision,float,pointer-sized,quad-word數據;
DA用于顯示ASCII,DU用于顯示UNICODE;
BYB,BYD,顯示binary和Byte及binary和DWORD
補充一個DV,用于查看本地變量用的
這些指令區分大小。
棧指令k[b|p|P|v]
這四條指令顯示的內容類似,但是每個指令都有特色,KB顯示三個參數,Kp顯示所有的參數,但需要Full Symbols或Private PDBSymbols支持。KP與Kp相似,只是KP將參數換行顯示了。Kv用于顯示FPO和調用約定,KD,用于顯示Stack的Dump,在跟蹤棧時比較有用。
這些指令區分大小。
KD顯示的內容:
0012fbd0  0012fbf0
0012fbd4  77e2158f USER32!UserCallWinProc+0x18
0012fbd8  0016011e
0012fbdc  00000030
0012fbe0  750a0c3f
0012fbe4  00000000
0012fbe8  00000000
0012fbec  dcbaabcd
0012fbf0  0012fc2c
0012fbf4  77e1279c USER32!DefDlgProcWorker+0xbf
0012fbf8  004018e0 DGGuarder!MainDLGproc [j:\mydriver\dgguarder2\dgguarder.c @ 350]
0012fbfc  0016011e
0012fc00  00000030
0012fc04  750a0c3f
0012fc08  00000000
0012fc0c  00629d08
0012fc10  00000030
0012fc14  00619828
0012fc18  77e0f626 USER32!__ClientLoadMenu+0x38
0012fc1c  77e0f635 USER32!__ClientLoadMenu+0x47
  KP顯示的內容:
ChildEBP RetAddr  
0012fbd0 77e2158f DGGuarder!MainDLGproc(
   struct HWND__ * hwnd = 0x0016011e,
   unsigned int message = 0x30,
   unsigned int wParam = 0x750a0c3f,
   long lParam = 0)+0x227 [j:\mydriver\dgguarder2\dgguarder.c @ 415]
0012fbf0 77e1279c USER32!UserCallWinProc+0x18
0012fc5c 77e0b981 USER32!DefDlgProcWorker+0xbf
0012fd14 77e140bb USER32!InternalCreateDialog+0x695
0012fd44 77e1410f USER32!InternalDialogBox+0xaa
0012fd64 77df41ec USER32!DialogBoxIndirectParamAorW+0x34
0012fd90 00401cdc USER32!DialogBoxParamA+0x4a
0012fe88 00408684 DGGuarder!WinMain(
   struct HINSTANCE__ * hInstance = 0x00400000,
   struct HINSTANCE__ * hPrevInstance = 0x00000000,
   char * lpCmdLine = 0x00132902 "",
   int nCmdShow = 10)+0x5c [j:\mydriver\dgguarder2\dgguarder.c @ 469]
0012ffc0 77e88989 DGGuarder!WinMainCRTStartup(void)+0x194 [f:\vs70builds\3077\vc\crtbld\crt\src\crt0.c @ 251]
0012fff0 00000000 KERNEL32!BaseProcessStart+0x3d
數據修改指令e{b|d|D|f|p|q|w}
  請參見文檔吧:)
反匯編指令u,uf
u @$exentry L10
0:001> u @$exentry L10
notepad!WinMainCRTStartup:
01006420 55               push    ebp
01006421 8bec             mov     ebp,esp
01006423 6aff             push    0xff
01006425 6888180001       push    0x1001888
0100642a 68d0650001       push    0x10065d0
0100642f 64a100000000     mov     eax,fs:[00000000]
01006435 50               push    eax
01006436 64892500000000   mov     fs:[00000000],esp
0100643d 83c498           add     esp,0xffffff98
01006440 53               push    ebx
01006441 56               push    esi
01006442 57               push    edi
01006443 8965e8           mov     [ebp-0x18],esp
01006446 c745fc00000000   mov     dword ptr [ebp-0x4],0x0
0100644d 6a02             push    0x2
0100644f ff1560110001 call dword ptr [notepad!_imp____set_app_type (01001160)]
uf (Unassemble Function)指令對整個函數進行反匯編
uf GetLanguageCount
0:000> uf GetLanguageCount
DGGuarder!GetLanguageCount [j:\mydriver\dgguarder2\language.c @ 54]:
   54 00403c00 55               push    ebp
   54 00403c01 8bec             mov     ebp,esp
   54 00403c03 81ecc0000000     sub     esp,0xc0
   54 00403c09 53               push    ebx
   54 00403c0a 56               push    esi
   54 00403c0b 57               push    edi
   54 00403c0c 8dbd40ffffff     lea     edi,[ebp-0xc0]
   54 00403c12 b930000000       mov     ecx,0x30
   54 00403c17 b8cccccccc       mov     eax,0xcccccccc
   54 00403c1c f3ab             rep     stosd
   56 00403c1e 6a00             push    0x0
   56 00403c20 6828b44100       push    0x41b428
   56 00403c25 6820b44100       push    0x41b420
   56 00403c2a e8b1edffff       call    DGGuarder!ReadInt (004029e0)
   56 00403c2f 83c40c           add     esp,0xc
   58 00403c32 5f               pop     edi
   58 00403c33 5e               pop     esi
   58 00403c34 5b               pop     ebx
   58 00403c35 81c4c0000000     add     esp,0xc0
   58 00403c3b 3bec             cmp     ebp,esp
   58 00403c3d e85e0f0000       call    DGGuarder!_RTC_CheckEsp (00404ba0)
   58 00403c42 8be5             mov     esp,ebp
   58 00403c44 5d               pop     ebp
   58 00403c45 c3               ret
跟蹤指令T,TA,TB,TC,WT,P,PA,PC
  T指令單步執行,在源碼調試狀態下,可指源碼的一行,根據不同的選項也可以為一行ASM指令;
TA單步跟蹤到指定地址,如果沒有參數將運行到斷點處。
TB執行到分支指令,分支指令包括calls, returns, jumps, counted loops, and while loops
TC執行到Call指令
WT Trace and Watch Data,一條強大指令,對執行流程做Profile,執行一下看看結果吧
P,PA,PC相信不用多做解釋,大家也都明白了
源代碼操作指令 .,lsf,lsc,ls,l,lsp
.指令打一個源文件,可以打開一個全路徑的文件,也可以通過函數地址來打開并定位到源文件中函數的位置,如. –a myapp!main,. j:\mydriver\mydriver.c
lsf指定一個源文件為當前源文件,使用lsc可顯示當前指定的源文件ls可顯示源文件的代碼。Lsf可以使用全路徑,如果源路徑已經設置,也可以直接指定源文件名稱。如lsf mydriver.c,lsf j:\mydriver\mydriver.c
lsc顯示當前源文件
ls顯示當前源文件的代碼,如ls 200顯示第200行
l 用于設置源文件選項
lsp 設置源文件行在調試時顯示范圍比如,顯示當前行的前50,后50,lsp 100
但通常使用Windbg時,可以直接用Ctrl+O來打開并查看源文件
寄存器指令 r
相信大家對這個指令都很熟悉,在Windbg中r指令除了可以顯示修改CPU寄存器之外,Pseudo-Register可使用這個命令來修改。對eax 操作,r eax 顯示其值,r eax=2,修改其值;r $t2=10,修改Pseudo-Register的值,r @$t2顯示其值。
Search 指令 s,#
S指令對內存區別進行查找,可用于查找數字,字符串,但不支持模式查找。s -d @esp L100 8187bc40,從esp指向的內存地址0x100個字節內查找 DWORD  8187bc40。查找字符串 s -a 0012ff40 L20 "Hello" 。s -sa 和 s -su 顯示內存可打印的ASCII和Unicode字符串。
#指令可以查詢匯編指令模式, # "call[ ]+esp" kernel32 L1000查找call esp 指令。
其他常用指令 lm,!peb,x,dt
lm 查看當前載入的模塊
!peb 查看當前進程環境塊(PEB)
x 查看模塊的符號,如x mydriver!*FastIo*,顯示所有與*FastIo*匹配的符號列表
dt 查看類型數據,還可用于查看模塊類型的符號列表,如 dt dgguarder!_IMAGE_DOS_HEADER 00400000
從00400000處查看_IMAGE_DOS_HEADER類型的數據
上下文的概念
  Windbg下上下文的概念很重要,根據文檔中說明有多種上下文概念,
Session Context,
Process Context
Register Context(其實也就是線程上下文)
Local Context(這個關系的本地如果解析本地變量的問題)
調試Win32應用程序,Session Context和Process Context是確定的,主要是Register Context,也即Thread Context,可以使用~指令來查看,改變當前的Thread Context 。~*顯示所有線程列表,~xs用于切換上下文(x是數字),如:~1s,將上下文切換到1號線程。
.frame用來設置Local Context。

PAUSE
好了,基本的指令都已經列出了來了,Kernel Debug現在先不寫了,其實跟Win32也差不多。如果再有時間再寫吧。本文對指令沒有說的太細,詳細說明見Windbg文檔,希望見諒

posted on 2008-01-18 18:29 大龍 閱讀(8619) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线亚洲一区| 亚洲视频欧美视频| 欧美日韩国产成人在线| 久久视频精品在线| 欧美77777| 欧美金8天国| 欧美日韩专区在线| 国产精品网站一区| 国产亚洲精品v| 在线成人激情| 亚洲精品国产拍免费91在线| 一区二区三欧美| 欧美一区二区三区视频| 久久综合伊人77777| 亚洲国产精品福利| 一本久久青青| 久久久久久久久久久久久9999| 免费在线观看一区二区| 国产精品久久久亚洲一区| 极品日韩av| 亚洲图色在线| 免费观看在线综合| 亚洲网站在线看| 欧美国产三级| 国产自产高清不卡| 亚洲你懂的在线视频| 裸体女人亚洲精品一区| 99这里只有久久精品视频| 久久爱另类一区二区小说| 欧美日本精品在线| 一色屋精品视频免费看| 亚洲专区在线| 久久亚洲视频| 亚洲天堂av在线免费| 久久在线免费观看视频| 国产精品视频福利| 日韩视频中文| 欧美大片在线看免费观看| 羞羞色国产精品| 国产精品久久久久久久久婷婷 | 亚洲国产精品久久91精品| 亚洲一区不卡| 国产在线视频欧美| 国产精品99久久久久久久久| 欧美aaa级| 久久久久网站| 激情一区二区| 久久久久国产一区二区三区| 中日韩美女免费视频网址在线观看| 久久网站热最新地址| 国产精品亚洲产品| 亚洲欧美日韩国产另类专区| 亚洲伦理一区| 欧美日韩 国产精品| 99国产精品| 亚洲人成久久| 欧美成在线观看| 亚洲精品免费网站| 亚洲国产精品电影| 欧美精品一区二区三区蜜臀| 亚洲精品影视| 亚洲精品乱码久久久久久黑人 | 亚洲欧美日韩国产综合| 欧美午夜电影网| 亚洲先锋成人| 亚洲免费在线| 国产一区二区三区在线免费观看 | 欧美日本免费| 亚洲网站在线观看| 亚洲嫩草精品久久| 国产一区日韩二区欧美三区| 久久久www| 久久影院午夜论| 亚洲裸体视频| 亚洲一区国产精品| 国内成+人亚洲| 欧美高清自拍一区| 欧美日韩一区二区免费在线观看 | 欧美国产第一页| 欧美精品在线网站| 欧美一区二区三区日韩| 久久综合99re88久久爱| aⅴ色国产欧美| 亚洲一区二区欧美日韩| 欧美电影电视剧在线观看| 欧美国产精品久久| 亚洲在线观看视频| 久久精品国产精品亚洲| 91久久极品少妇xxxxⅹ软件| 亚洲麻豆一区| 国产午夜久久| 亚洲国产欧美日韩精品| 国产精品久久999| 欧美国产91| 国产有码在线一区二区视频| 亚洲黑丝在线| 国外成人网址| 亚洲日本国产| 亚洲一区二区三区四区在线观看| 精品成人久久| 亚洲一区在线观看视频| 91久久精品视频| 久久av二区| 亚洲一区综合| 暖暖成人免费视频| 久久久久久婷| 国产精品外国| 99亚洲视频| 亚洲精品一区二区三区在线观看| 先锋影音国产精品| 亚洲小说区图片区| 欧美gay视频激情| 久久婷婷一区| 国产欧美视频在线观看| 洋洋av久久久久久久一区| 在线观看欧美精品| 午夜精品国产更新| 亚洲欧美激情视频| 欧美三级资源在线| 91久久精品网| 亚洲国产成人av| 久久精品二区三区| 久久精品99国产精品日本 | 欧美日本亚洲韩国国产| 免费视频亚洲| 一区二区自拍| 久久久综合香蕉尹人综合网| 久久精品一二三| 国产日韩精品久久| 先锋影音一区二区三区| 欧美一区国产二区| 国产欧美va欧美va香蕉在| 亚洲在线免费观看| 亚洲欧美日韩精品久久久| 欧美性色视频在线| 亚洲小说欧美另类社区| 亚洲欧美一区二区三区极速播放| 欧美日韩中文精品| 亚洲影视在线| 久久精视频免费在线久久完整在线看| 国产精品久久久久久久免费软件 | 永久久久久久| 久久久久久网址| 亚洲第一毛片| 99国产精品国产精品毛片| 欧美精品午夜| 一本色道久久综合狠狠躁篇怎么玩 | 欧美在线999| 久久久久99| 在线欧美视频| 欧美激情一区三区| 日韩一区二区精品葵司在线| 亚洲视频日本| 国产香蕉久久精品综合网| 久久九九国产精品怡红院| 欧美激情一区在线观看| 一二三区精品| 国产女精品视频网站免费| 久久久国产一区二区| 亚洲国产精品成人一区二区 | 一区二区日韩伦理片| 国产精品高清网站| 欧美一区免费视频| 亚洲成色777777女色窝| 在线视频一区二区| 国产美女精品视频| 另类尿喷潮videofree| 日韩一区二区精品| 久久久久一区二区| 夜夜夜精品看看| 国产偷久久久精品专区| 欧美波霸影院| 久久www成人_看片免费不卡| 亚洲国产一区二区三区青草影视| 亚洲午夜三级在线| **性色生活片久久毛片| 欧美日韩亚洲一区二区| 久久久久久久久久久成人| 艳女tv在线观看国产一区| 久久综合给合久久狠狠狠97色69| 一区二区av在线| 极品尤物一区二区三区| 欧美性猛交视频| 欧美www视频| 欧美在线视频免费| 中文在线资源观看网站视频免费不卡 | av不卡免费看| 欧美黑人国产人伦爽爽爽| 欧美自拍偷拍| 亚洲一区二区三区午夜| 亚洲麻豆一区| 好看的日韩视频| 国产精品综合久久久| 欧美日韩国产成人精品| 乱码第一页成人| 久久国产福利| 欧美一区二区三区的| 亚洲一区二区av电影| 99re66热这里只有精品3直播| 欧美成人一区二区|