使用VC6調試IE8的BHO

最近在調試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可能會導致崩潰(除非你程序中的變量支持多進程共享)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章