天天看点

使用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可能会导致崩溃(除非你程序中的变量支持多进程共享)。

继续阅读