日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinDBG 要点学习

發布時間:2025/4/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinDBG 要点学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WinDBG
?用戶可以自由定義調試事件的處理方式,編寫調試擴展模塊來定制和補充WinDBG的調試功能。
?目前版本的WinDBG提供了20多條標準命令,140 多條元命令,大量的擴展命令。
?WinDBG使用工作空間來描述和存儲一個調試項目的屬性、參數、以及調試器設置等信息。
?WinDBG支持兩種方法在命令中加入注釋文字,一種是使用*命令,一種使用$$。
?WinDBG支持定義和使用三類別名:用戶命名別名,固定名稱別名,WinDBG自動定義的別名。

?在很多命令前可以加上進程和線程限定符,用來指定這些命令所適用的進程和線程。
?以下命令顯示0號線程的寄存器和棧回溯,
~0r;~0k;
?可以把輸入的命令和命令的執行結果記錄到一個文本文件中,稱為Log File。
?附加到已經運行的進程的方法有:使用菜單或F6熱鍵;將WinDBG設置為JIT調試器;啟動WinDBG時使用-p開關;啟動WinDBG時使用-pn開關;使用.attach命令。
?當調試系統服務或者被其它程序自動啟動的程序時,通常需要使用上面介紹的方法來建立調試會話。
?非入侵式調試,WinDBG與目標進程沒有真正建立調試與被調試的關系。

WinDBG 雙機內核調試
?兩臺系統之間的通信方式,目前WinDBG支持串行口、1394、USB2三種方式。
?內核調試引擎內建在Windows系統中,缺省是禁止的。
?如果目標系統是Windows Vista,應該使用BCDEdit工具來修改它的啟動選項。
?對于串行口方式,主機和目標系統所使用的COM端口號可以不同,但波特率應該一樣。
?對于1394方式,主機和目標機的channel號一定要一致。

?所謂局部上下文,Local Context,是指局部變量所基于的語境。
?在調試時,調試器缺省顯示的是當前函數所對應的局部上下文。
?當前函數和局部變量都是與棧幀密切相關的,所以WinDBG調試器通常使用棧幀號來代表局部上下文。
?使用不帶任何參數的.frame命令可觀察當前的局部上下文。
?使用dv命令可以顯示當前函數的參數和局部變量。

棧回溯的基本原理和步驟
?根據程序的當前執行位置,得到程序指針寄存器的值,然后查找符號得到當前所在的函數。
?尋找當前函數的棧幀基準地址;EBP是棧幀的基準地址,ESP是棧的當前棧頂地址。
?得到的EBP值便是棧回溯報告中的ChildEBP值,將其記錄在當前行的第一列。
?尋找當前函數的返回地址,這個信息通常被保存在EBP+4位置。
?典型的函數返回地址在0x400000到0x80000000間。
?尋找父函數的棧幀基地址;繼續尋找父函數的父函數;直到ChildEBP值等于0,表示已經到達當前線程的最后一幀。


?命令e用來修改指定內置地址或者區域的內容。
?在任一用戶態調試會話中執行dt ntdll!*List*可以看到很多鏈表類型。
?Windows中主要使用兩種鏈表,一種是雙向鏈表,每個節點是一個LIST_ENTRY結構。
?另一種是單向鏈表,每個節點是SINGLE_LIST_ENTRY結構。
?Windows系統內所有進程的EPROCESS結構是通過ActiveProcessLinks字段相互鏈接的。
?全局變量PsInitialSystemProcess記錄了初始的系統進程的EPROCESS結構的地址。
?使用如下的dt命令來遍歷所有進程,
dt nt!_EPROCESS -l ActiveProcessLinks.Flink -y Ima -yoi Uni poi(PsInitialSystemProcess)


?可使用WinDBG的.call元命令來從調試器中調用被調試程序中的函數。
?模仿C/C++語言中的流程控制關鍵字,WinDBG定義了一系列元命令和擴展來實現流程控制,統稱為流程控制符號。
?WinDBG命令程序中可以使用如下幾種變量:自動的偽寄存器;用戶賦值的偽寄存器;用戶定義的別名;自動別名;固定名稱的別名。
?控制線程執行,第一種方法是通過增加線程的掛起計數來禁止線程被恢復運行。
?輸入如下命令可以增加1號線程的掛起計數,
~1 n
?控制線程執行的第二種方法是使用~f和~u命令,前者凍結一個線程,后者解凍。


?Windows操作系統的進程加載器加入了特別的調試支持:在完成最基本的用戶態初始后,系統的進程初始化函數就會主動執行斷點指令,觸發斷點,讓調試目標中斷到調試器中。這個斷點稱為初始斷點。
?NTDLL的LdrpInitializeProcess函數調用了DbgBreakPoint,后者包含了斷點指令。
?初始線程真正在新進程環境下執行是從內核態的KiThreadStartup開始的。
?KiThreadStartup 將線程的IRQL(中斷級別)降到APC級別后調用PspUserThreadStartup來為線程在用戶態執行做準備。

總結

以上是生活随笔為你收集整理的WinDBG 要点学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。