最近在調試BHO,研究了一下調試方法。在調試BHO的時候首先需要選定你的瀏覽器版本,我選擇的是IE8內核。
1. 配置IE的運行方式
由於IE8是多進程模式,爲了能夠調試BHO,必須將IE8設置爲單進程模式。網上有些介紹如何設置IE8爲單進程的方法。但在我的機器上不見效,首先把網上的方法粘貼如下:
IE8的一個重要特性就是每個Tab 頁在獨立的進程中運行,我們稱之爲LCIE (Loosely-Coupled IE)。 所以大家在升級到IE8之後會發現資源管理器裏面有兩個或者多個iexplore.exe進程。
LCIE 的好處在:
1)某個Tab 頁崩潰之後不會影響其他Tab 頁和IE主窗口;
2)Tab 進程在Vista 和Windows 7 下面以 Low Integrity Level 運行,這種進程基本上無法對系統進行任何讀寫操作,可以嚴格把病毒木馬拒之門外。 這也就是大家所謂的"沙盤"技術。 插一句題外話:) 很多人認爲"沙盤"技術是Google Chrome 獨創的,其實早在3年前的IE7就有這個功能了。
如果想要在IE8中關閉LCIE功能,使IE8以單個進程模式運行(IE8主窗口以及所有的Tab頁都在一個iexplore.exe進程), 可以設置註冊表:
1)在 HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main 鍵下面添加DWORD值 TabProcGrowth ,並設置TabProcGrowth的數值爲0 .(下圖例,注意狀態欄的路徑):
===============================================================================================================
我的機器用這個方法不行,然後就用了另外一個方法,思路也是修正註冊表鍵值,但是是這樣的:
首先,定位到註冊表鍵:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
然後在該鍵值下添加一個鍵值如下:
名稱:TabProcGrowth
類型:REG_DWORD
值: 0
2. 配置調試工具
我使用VC6.0,所以在project->setting->debug->executable for debug中設定iexplore.exe的路徑,一般是C:\Program Files\Internet Explorer\iexplore.exe 。
接着你就可以在dllMain或者invoke中設置斷點進行調試。
調試時需要注意rundll32.exe必須手動關閉,同時開啓多個rundll32.exe可能會導致崩潰(除非你程序中的變量支持多進程共享)。