您的位置:首页 > 其它

如何使用VC和OD调试OCX控件

2016-01-29 22:37 344 查看
在实际编程项目过程中,经常需要编写Activex控件和分析别人编写的ocx控件,但是控件调试却是麻烦的事。刚开始无所适从,不知道从哪里下手。

后来,经过自己问度娘和自己摸索,总结出来一些方法。

一、VC下编写的ocx的调试。[vc以vc60为目标,虽说老了点,但是道理一样的。高手勿喷。]

自己有源代码,就容易的多。首先,VC项目设置为Debug编译模式,Release模式是没法跟踪代码和设置断点的。生成一个ocx项目,我没有研究

atl模式,这里基于MFC ActiveX ControlWizard生成一个新项目。过程就不说了,网上有的是。添加接口属性或者方法以后,编写代码并编译通过

后,控件会自动注册成功。注意,控件有个特征名称,与你的项目名很像。想测试控件的方法或属性,怎么办呢,比较笨的办法就是另外创建一个

exe程序,让这个外部exe程序调用ocx的方法,然后在VC里设置 工程-->设置--->调试 设置可执行调试对话框--->你的exe的路径!

然后,运行程序会自动打开你编写的exe程序,再要调试的函数里设置断点,执行你的函数调用方法,系统暂停到你的断点,OK,恭喜你,可以调试了!

其实,微软提供一个外部程序,用于调试ocx,就是它:Program Files (x86)\Microsoft Visual Studio\Common\Tools\TSTCON32.EXE。第二个方法就是

利用它了。按上面的设置外部程序的步骤,设置为TSTCON32的路径,启动调试程序后,先打开这个tstcon32程序,此时需要先在这个程序中,加载当前

调试的ocx,具体的操作是 Edit-->Insert New Control--->选择你的ocx控件,注意找和你项目很像的名字!之后OK按钮,就加载了控件!之后的操作就

就是在TSTCON32里调用你的方法了,具体操作是 Control-->Invoke Methods。进去后既可以看到你的接口方法了,还可以添加参数,Invoke 就可以调用

了。想调试哪个就调试哪个。第三种方法,就是属于给IE调用的ocx,可以编写一个js放到html中调用,然后代码中放入参数查看运行结果。实际工作中,

看需求,合理使用这几种方法,包你满意。

二、调试跟踪分析别人的ocx。没有源代码,别人的ocx可以vc写的,可以是delphi写的,或者vb写的。如果要分析这样的ocx,就需要有一点汇编知识,尤其要分

析里面的算法的时候。最令人苦恼的是OD里看不到ocx的接口方法的入口!!!!只有DllRegisterServer、DllUnregisterServer等几个。然后就需要用到

ocx函数查看.exe 这个工具了。载入你需要分析的ocx,所有方法都列出来了,函数名后面一个地址 类似这样的:

Aboutbox [invoke_Func]0008E7DB

就是说Aboutbox这个方法入口,在文件偏移0008E7DB处。

首先注册这个ocx,regsvr32 可以手动注册,不会的百度。然后od载入TSTCON32.EXE(当然这里可以载入IE、你写的exe调用或者demo),然后参考第一条里

加载控件的方式Insert New Control(目的是将ocx加载到内存,如果是自己编写的exe就可以直接操作下面的)。到OD的菜单,查看有没有加载你的ocx,菜单

查看--->内存;找到你的ocx的地址空间,选择区段是Code 或者text ,注意“包含”选项是“SFX、代码”的。不要选PE文件头。然后右键,“在反汇编窗口中查看”

即可进入ocx的地址空间。怎么找到入口函数呢,看上面的Aboutbox 的地址 0008E7DB,因为地址重定位,这个8位数字的前4位肯定变了,但是后4位一般不会

变,好了,根据这后四位E7DB找吧,xxxxe7db,就是它了,F2下断点,一般这条这里就是jmp 或者这条指令紧跟jmp ,jmp 的目的地址就是方法的入口。

下面就不需要多说了吧,执行你的方法,断点就会起作用,F8进去,看看它都干了什么吧。

工具下载:
http://download.csdn.net/detail/bd_lyy791128/9422703
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: