怎样调试delphi写的服务程序-com对象及hook程序
来源:互联网 发布:c语言形参和实参 编辑:程序博客网 时间:2024/06/07 08:54
作者:呆呆(abingle.com)
我只会用delphi,也深感于delphi的灵气。
1.调试delphi 写的服务程序,有这么一个办法。原来每次都是用attach to process方法,很麻烦。并且按照服务线程的执行线路,可能会停不到想要的断点。笨办法是,在procedure TsvcFrm.ServiceExecute(Sender: TService);中想要下断的语句前加个人定胜天的sleep(20000),但实际上这种办法是主观臆测的。可行,没问题。记得大学时,俺一同学,也会修电视,他的办法是弄个小锤子,四处敲击,没两下就好了,和我用万用表的方法不一样,万用表他根本不会用。而且产生的效益比我的要乐观。毕业了,他回家开个网吧,也算是做IT,而我成了一位对编程颇有研究的IT业余人士,结果他收入还是比我高。日,下辈子,老子扛大炮去修劳力士去。回忆回忆过去,展望展望未来,无限感慨。上面的方法是可以的,如同锤子,仔细了解下服务程序的执行过程,你会发现,用下面的方法,就可以把服务程序当普通程序调试了。
program svcProxy;
uses
SvcMgr,
scvmain in ’scvmain.pas’ {svcFrm: TService};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TsvcFrm, svcFrm);
svcFrm.ServiceExecute(nil);
//Application.Run;
end.
如上修改dpr文件,就可以直接在serviceexecute过程中下断了,what a good idea. OK ,debug delphi services directly.
调试好了,修改回去,就行了,调试delphi服务程序就简单和多了。再也不用去附加到进程这种方法了。
2.调试com对象。
这种方法网上有介绍,带上。
打开 run->com/comexp.msc ,新建一应用程序(abcd)
并将你的com对象加入进来,找到abcd属性->高级,将调试勾上,拷下”D:\Delphi7\Bin\bordbg70.exe” C:\WINDOWS\system32\dllhost.exe /ProcessID:{53342392-DAAE-4542-AC55-2EDA5080671E}
在delphi调试中,宿主填上那个dllhost.exe ,参数填上/ProcessID:{53342392-DAAE-4542-AC55-2EDA5080671E},好了,现在就可以当作是普通程序来调试了。有的人说要把这个加上project|option|linker|Include TD32 debug info 和Include remote debug symbols打勾,无所谓,不勾也行,不行就勾。
加上一个小经验,com程序的类,不能在create中下断,看看源代码就知道了,要在init过程中下断哦。
3.上面其实就是怎样找宿主的问题,所以要灵活运用啊。举一例:上次做了一个hook程序,插入到别的进程中,怎么调试那个插入的dll文件呢?可以,没问题。比如说,用a.exe 插b.dll 到 c.exe中,我们让a.exe 中创建 c.exe,并将a.exe做为宿主,在b.dll.pas中下断,想断哪就断哪。
- 怎样调试delphi写的服务程序-com对象及hook程序
- Delphi调试COM程序的设置
- delphi服务程序(service)的调试方法
- delphi服务程序(service)的调试方法
- delphi怎样写一个程序的日志啊?
- 怎样写第一个ATL/COM程序
- 在delphi里调试com+程序
- 如何不用Delphi提供的ServiceApp写系统服务程序
- 用DELPHI进行NT、2000、2003服务程序的调试
- Delphi调试服务程序的两种方法
- 在DELPHI中HOOK程序的编写
- 怎样写一个 NT 服务程序
- 怎样写一个 NT 服务程序
- 让DELPHI写的服务程序在服务管理器中显示“描述”
- VS2005调用Delphi编写的COM程序
- 图文并茂 delphi 编写你的com程序
- Windows服务程序的调试
- windows服务程序的调试
- 每天一个linux命令(61):wget命令
- 每周一篇(2):习惯的重要性
- jetty原理及与tomcat比较
- ACM搜索题目总结
- 20140102
- 怎样调试delphi写的服务程序-com对象及hook程序
- 程序猿找工作必练内功:排序算法大总结(六)——shell排序
- 不使用Cygwin,在eclipse中快速开发JNI,一键生成C头文件.h,以及一键使用NDK交叉编译
- Kettle数据抽取(转换)出现乱码问题解决方法
- UVa 10905 - Children's Game(求多个正整数排列后,所得的新的数字的极值)
- Uni2D —— 入门(全)
- DIY Linux with Buildroot
- contentSize、contentInset和contentOffset区别
- Tomcat 系统架构与设计模式