window服务调试二:调试windows服务方法

调试服务程序的方法有三种 直接设置EIP法   设置循环法  设置JIT法

一、直接设置EIP法

较为简单的服务程序,可以用这个方法,直接启动调试,用调试器设置当前EIP为svcMain的入口,调试功能

二、设置循环法

由于直接调试的服务程序与SCM(Services Control Manager)启动的程序表现不一样,所以我们用附加SCM启动的程序,但是有个问题是,一旦启动那么就会执行功能,我们如何动态调试前面的功能呢,其实很简单,我只要的服务程序的入口点设置无限循环如EB FE,这个指令的意思是跳转到当前位置,这样就会陷入无限循环,这个时候附加后还原改动的代码就能调试完整的功能

三、设置JIT法

设置JIT法就是设置认调试器,每当系统接收到的程序不能自己处理的异常就会启动认调试器,所以我们可以修改程序在合适的位置触发异常,这样当异常发生的时候就会自动打开调试器附加程序,这个时候附加后还原改动的代码就能调试完整的功能

注意:

1.SCM开始启动服务后,认等待30秒,若30秒后,服务程序没有设置启动标识为运行,SCM就会认为启动失败,这时我们可以修改注册表的HKEY_LOCAL_MACHINE\SYstem\CurrentControlSet\Control\ServicesPipeTimeout

image

值可以设长一点,单位为秒
2.JIT的设置方法x64dbg和ollydeg都有自动设置

x64dbg:
菜单栏选择 选项(o)->选项(p)->杂项->将这份x64dbg设为即时调试器

image


ollydbg:
菜单栏选择 选项(T)->实时调试设置(J)->设置OllyICE为实时调试器

image

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...