国产久草深夜福利精品_精品国产看高清国产毛片_成年日韩片av在线网站_亚洲国产综合777_免费高清一级在线观看_欧美色图中文字幕_老中医用嘴排阴毒 小雨_99精品无码视频在线播放_久久久精品强暴视频_国产aⅴ一区最新精品

Windows內(nèi)核調(diào)試器原理淺析(一)
電子元件,電子元器件深圳市創(chuàng)唯電子有限公司
您現(xiàn)在的位置: 首頁 > 電子技術(shù)
Windows內(nèi)核調(diào)試器原理淺析(一)  2012/3/1
WinDBG和用戶調(diào)試器一點很大不同是內(nèi)核調(diào)試器在一臺機器上啟動,通過串口調(diào)試另一個相聯(lián)系的以Debug方式啟動的系統(tǒng),這個系統(tǒng)可以是虛擬機上的系統(tǒng),也可以是另一臺機器上的系統(tǒng)(這只是微軟推薦和實現(xiàn)的方法,其實象SoftICE這類內(nèi)核調(diào)試器可以實現(xiàn)單機調(diào)試)。很多人認為主要功能都是在WinDBG里實現(xiàn),事實上并不是那么一回事,windows已經(jīng)把內(nèi)核調(diào)試的機制集成進了內(nèi)核,WinDBG、kd之類的內(nèi)核調(diào)試器要做的僅僅是通過串行發(fā)送特定格式數(shù)據(jù)包
  WinDBG和用戶調(diào)試器一點很大不同是內(nèi)核調(diào)試器在一臺機器上啟動,通過串口調(diào)試另一個相聯(lián)系的以Debug方式啟動的系統(tǒng),這個系統(tǒng)可以是虛擬機上的系統(tǒng),也可以是另一臺機器上的系統(tǒng)(這只是微軟推薦和實現(xiàn)的方法,其實象SoftICE這類內(nèi)核調(diào)試器可以實現(xiàn)單機調(diào)試)。很多人認為主要功能都是在WinDBG里實現(xiàn),事實上并不是那么一回事,windows已經(jīng)把內(nèi)核調(diào)試的機制集成進了內(nèi)核,WinDBG、kd之類的內(nèi)核調(diào)試器要做的僅僅是通過串行發(fā)送特定格式數(shù)據(jù)包來進行聯(lián)系,比如中斷系統(tǒng)、下斷點、顯示內(nèi)存數(shù)據(jù)等等。然后把收到的數(shù)據(jù)包經(jīng)過WinDBG處理顯示出來。    

    在進一步介紹WinDBG之前,先介紹兩個函數(shù):KdpTrace、KdpStub,我在《windows異常處理流程》一文里簡單提過這兩個函數(shù),F(xiàn)在再提一下,當異常發(fā)生于內(nèi)核態(tài)下,會調(diào)用KiDebugRoutine兩次,異常發(fā)生于用戶態(tài)下,會調(diào)用KiDebugRoutine一次,而且第一次調(diào)用都是剛開始處理異常的時候。

    當WinDBG未被加載時KiDebugRoutine為KdpStub,處理也很簡單,主要是對由int 0x2d引起的異常如DbgPrint、DbgPrompt、加載卸載SYMBOLS(關于int 0x2d引起的異常將在后面詳細介紹)等,把Context.Eip加1,跳過int 0x2d后面跟著的int 0x3指令。

    真正實現(xiàn)了WinDBG功能的函數(shù)是KdpTrap,它負責處理所有STATUS_BREAKPOINT和STATUS_SINGLE_STEP(單步)異常。STATUS_BREAKPOINT的異常包括int 0x3、DbgPrint、DbgPrompt、加載卸載SYMBOLS。DbgPrint的處理最簡單,KdpTrap直接向調(diào)試器發(fā)含有字符串的包。DbgPrompt因為是要輸出并接收字符串,所以先將含有字符串的包發(fā)送出去,再陷入循環(huán)等待接收來自調(diào)試器的含有回復字符串的包。SYMBOLS的加載和卸載通過調(diào)用KdpReportSymbolsStateChange,int 0x3斷點異常和int 0x1單步異常(這兩個異;旧鲜莾(nèi)核調(diào)試器處理得最多的異常)通過調(diào)用KdpReportExceptionStateChange,這兩個函數(shù)很相似,都是通過調(diào)用KdpSendWaitContinue函數(shù)。KdpSendWaitContinue可以說是內(nèi)核調(diào)試器功能的大管家,負責各個功能的分派。這個函數(shù)向內(nèi)核調(diào)試器發(fā)送要發(fā)送的信息,比如當前所有寄存器狀態(tài),每次單步后我們都可以發(fā)現(xiàn)寄存器的信息被更新,就是內(nèi)核調(diào)試器接受它發(fā)出的包含最新機器狀態(tài)的包;還有SYMBOLS的狀態(tài),這樣加載和卸載了SYMBOLS我們都能在內(nèi)核調(diào)試器里看到相應的反應。然后KdpSendWaitContinue等待從內(nèi)核調(diào)試器發(fā)來的包含命令的包,決定下一步該干什么。讓我們來看看KdpSendWaitContinue都能干些什么:

        case DbgKdReadVirtualMemoryApi:
            KdpReadVirtualMemory(&ManipulateState,&MessageData,ContextRecord);
與《Windows內(nèi)核調(diào)試器原理淺析(一)》相關列表
電話:400-900-3095
QQ:800152669
庫存查詢
Copyright(C) 2011-2021 Szcwdz.com 創(chuàng)唯電子 版權(quán)所有 備案號:粵ICP備11103613號
專注電子元件代理銷售  QQ:800152669  電子郵件:sales@szcwdz.com  電話:400-900-3095