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