友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第308章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                     直接或間接使用的所有            。它還會記錄「最後次                     」至「 



                entry  point  執行」之間的經過時間。此期間正是  Win32  載入器呼叫  implicitly  loaded 



                DLLs  的初始化程式碼(程式進入點)的時間。最後,它允許使用者濾掉所有的  debug 



                event                OutputDebugString        …            DBWIN !? 

                     ,只記錄被除錯端的                     輸出的字串  這功能可不正是 



                使用真簡單,不是嗎!這程式若說還有什麼缺點,那就是「只有被此  DBWIN  載入之程 



                式,其  TRACE  輸出字串才能夠被觀察」。有洠в锌赡芟瘛 in16  的  DBWIN  那樣,做 



                個系統層面的  〃global〃  DBWIN  ,像常駐程式那樣隨時偵測等候任何程式發出的任何 



                TRACE  字串呢?可能,但我們還要再層獄,進入  ring0  層次。 



936 


…………………………………………………………Page 999……………………………………………………………

                                                                  附錄D    以MFC 重建DBWIN  



                                             CreateProcess(。。。DEBUG_ONLY_THIS_PROCESS。。。); 



                                                                                    process A 



                                                                                 。。。 

                                                                                 TRACE(〃trace1 n〃); 

                                                                                 TRACE(〃trace2 n〃); 

                                                                                 TRACE(〃trace3 n〃); 

                                                                                 。。。 



                                                            OUTPUT_DEBUG_STRING_EVENT 



          LODPRF32 功能不少。若你把 〃OutputDebugString Only〃 

          那個圓鈕按,它就是個 DBWIN 。 



       圖九      LODPRF32   功能不少。若你把   〃OutputDebugString Only〃   那個圓 

              鈕按下,它就是個   DBWIN  。 



重建 DBWIN 之VxD 篇 



                      global DBWIN                                                  Ton Plooy 

       若想要寫個                       ,困難度陡增。不過,已經有做出來了。請參考 



       發表於   Windows Developer's Journal 1996。12  的  〃A DBWIN Utility for Win95〃  文。 



       前個  DBWIN  之所以不能夠做到  〃global〃  ,是因為行程有獨立的位址空間。如欲接收 



       除錯訊息,又必須建立「除錯器」與「被除錯端」的關係。那麼,有洠в惺颤N辦法 



       可以建立個「系統除錯器」,把所有執行起來的程式統統視為我的除錯對象?如果這 



       個問睿锌隙ù鸢福琯lobal DBWIN  就有希望了。 



       有,VMM  提供了個  INT 41h  介面。此介面作用起來的條件是,必須有個「系統除 



       錯器」存在。而「系統除錯器」存在的條件是:當  VMM  以int41h/AX=DS_DebLoaded  發 



       出訊息時,必須有程式以  AX=DS_DebPresent  回覆之。 



       可是  OutputDebugString  和「系統除錯器」有洠в惺颤N牽連?如果洠в袆t切白搭。幸 



       叩氖恰 utputDebugString  最終會牽動  VMM  的  Exec_PM_Int41h  service 。如果我們能 



                                                                                                    937 


…………………………………………………………Page 1000……………………………………………………………

                         第五篇    附錄  



                                                 Exec_PM_Int41h                                 Exec  PM  Int41h 

                                                                             hooking                 _    _          

                         夠寫個程式,與                                    掛勾(               ),使                          能夠先來呼 



                          叫我自己的函式,我就可以悠游自在在其處理TRACE  的除錯字串了。 



                         這個技術最大的難點在於,要與  VMM  打交道,我們得寫  ring0  程式。在  Windows 95   



                                            VxD    NT             VxD      VxD                            DOS/Windows  虛虛 

                         這意味著要寫                  ( 不支援                 )。        的架構其實不太難,                                     虛虛 



                         擬機器作業環境擬機器作業環境                   /         1993                                             VMM  

                         擬機器作業環境擬機器作業環境 (侯俊傑 旗標,                          )曾經有過詳細的探討。問睿陟丁                                  〉脑S 



                          多  services  常常要合著用,尤其是面對斷模擬、事件處理、與  ring3  通訊過程、乃至 



                         於  hooking  的處理等等,而這方面的資料與範例相當稀少。此外,ring0  和  ring3  間的 



                          同步(synchronous )處理,也很令頭痛。 



                                                                                                                            process A 

                                                           global  DBWIN 

                                                                                                                     。。。 

                                                                                                                     TRACE(〃JJHOU n〃); 

                                                                                                                     TRACE(〃MikeSon n〃); 

                                                                                                                     TRACE(〃Matt n〃); 

                                                                                                                     。。。 



                                                                                                                              process B 



                                                                                                                     。。。 

                                                                                                                     TRACE(〃trace1 n〃); 

                       
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!