天天看點

使用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 .(下圖例,注意狀态欄的路徑):

使用VC6調試IE8的BHO

===============================================================================================================

我的機器用這個方法不行,然後就用了另外一個方法,思路也是修正系統資料庫鍵值,但是是這樣的:

首先,定位到系統資料庫鍵: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可能會導緻崩潰(除非你程式中的變量支援多程序共享)。

繼續閱讀