一种应用于Windows系统的调试服务进程的启动方法技术方案

技术编号:38857704 阅读:15 留言:0更新日期:2023-09-17 10:02
本发明专利技术的实施例公开了一种应用于Windows系统的调试服务进程的启动方法,包括:创建dll动态链接库;在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程;在所述dll动态链接库中设置调试断点;启动服务进程时,将所述dll动态链接库注入所述服务进程中;重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行;若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。本发明专利技术通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。启动逻辑可能存在的bug。启动逻辑可能存在的bug。

【技术实现步骤摘要】
一种应用于Windows系统的调试服务进程的启动方法


[0001]本专利技术涉及Windows软件调试
,特别涉及一种应用于Windows系统的调试服务进程的启动方法。

技术介绍

[0002]在windows系统环境下,几乎每一种高级语言都拥有专门的调试器,供程序员进行侦错或跟踪自己的程序。Windows平台下的调试器,根据待调试进程的调试时机主要可分为两种:(1)在待调试进程启动时进行调试,待调试进程以暂停的方式启动调试子程序,调试子程序拥有与待调试进程相同的权限以及会话;(2)在待调试进程运行时进行附加调试,将调试子程序附加到正在运行的待调试进程中,待调试进程可以拥有与调试子程序不同的权限与会话。第一种调试器,针对无法修改代码的待调试服务进程,这种待调试服务进程由服务管理器启动,如果需要待调试服务进程的启动逻辑,则无法通过进程启动时调试的方法实现调试。第二种调试器,在待调试进程运行时进行附加调试,可能出现由于附加时机过晚,无法调试服务进程的情况。

技术实现思路

[0003]有鉴于此,本专利技术实施例的目的在于提供一种应用于Windows系统的调试服务进程的启动方法,通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
[0004]第一方面,本专利技术实施例提供了一种应用于Windows系统的调试服务进程的启动方法,其中,包括:
[0005]创建dll动态链接库。
[0006]在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程。
[0007]在所述dll动态链接库中设置调试断点。
[0008]启动服务进程时,将所述dll动态链接库注入所述服务进程中。
[0009]重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行。
[0010]若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。
[0011]结合第一方面,本专利技术实施例提供了第一方面的第一种可能的实施方式,其中,所述在所述dll动态链接库中添加检测代码包括:
[0012]在所述dll动态链接库的主函数中的启动入口处添加检测代码。
[0013]所述主函数为dllmain函数。
[0014]所述启动入口的函数为DLL_PROCESS_ATTACH。
[0015]结合第一方面,本专利技术实施例提供了第一方面的第二种可能的实施方式,其中,所述检测代码的函数为IsDebuggerPresent。
[0016]结合第一方面,本专利技术实施例提供了第一方面的第三种可能的实施方式,其中,所述在所述dll动态链接库中设置调试断点包括:
[0017]所述调试断点设置在所述dll动态链接库的主函数中的启动入口后。
[0018]结合第一方面,本专利技术实施例提供了第一方面的第四种可能的实施方式,其中,还包括:
[0019]若当前执行的服务进程为待调试进程,则检测所述待调试进程是否处于调试状态。
[0020]若所述待调试进程处于调试状态,则继续执行服务启动逻辑。
[0021]结合第一方面,本专利技术实施例提供了第一方面的第五种可能的实施方式,其中,所述将所述dll动态链接库注入所述待调试进程中包括:
[0022]在Windows系统的注册表下修改启动项,将所述dll动态链接库文件的全路径填入AppInit_DLLs的键值中。
[0023]windows系统提供了AppInit_DLLs机制,该机制允许通过将自定义DLL加载到每个应用程序的地址空间,AppInit_DLLs基础结构提供了一种用于挂钩系统API的简单方法。利用该机制,我们可以在服务启动时,将动态库注入到服务进程中,具体方法是在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows下修改键AppInit_DLLs,将需要注入的dll动态库文件全路径填入AppInit_DLLs值中,比如C:\Windows\System32\wait_for_debug.dll。
[0024]结合第一方面,本专利技术实施例提供了第一方面的第六种可能的实施方式,其中,所述dll动态链接库采用visual studio创建。
[0025]结合第一方面,本专利技术实施例提供了第一方面的第七种可能的实施方式,其中,所述调试断点采用visual studio设置。
[0026]结合第一方面,本专利技术实施例提供了第一方面的第八种可能的实施方式,其中,还包括:
[0027]进程启动前,判断当前执行的服务进程是否为待调试进程,若为待调试进程,则需要注入所述dll动态链接库。
[0028]判断所述待调试进程是否为敏感进程或者是需要防泄密的进程,如果是,则需要注入所述dll动态链接库进行安全调试。
[0029]结合第一方面,本专利技术实施例提供了第一方面的第九种可能的实施方式,其中,所述判断当前执行的服务进程是否为待调试进程包括:
[0030]在进程空间中,获取预设系统函数的地址,所述预设系统函数为Windows系统中的调用函数。
[0031]操作系统在管理内存时,每个进程都有一个独立的进程地址的空间,称作进程空间。所述预设系统函数为Windows系统中的调用函数,包括创建进程的函数ZwCreateUserProcess、分配进程的函数ZwAllocateVirtualMemory和写入进程内存空间的函数ZwWriteVirtualMemory等。
[0032]判断判断当前执行的服务进程是否在获取的所述预设系统函数的地址中,若是,则说明当前执行的服务进程为待调试进程。
[0033]第二方面,本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在
存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
[0034]第三方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述的应用于Windows系统的调试服务进程的启动方法。
[0035]本专利技术实施例的有益效果是:
[0036]本专利技术利用AppInit_DLLs注入时机早于进程执行启动逻辑的特征,实现特定场景的调试目的。利用AppInit_DLLs方式注入dll,并在此时机等待调试程序附加进程,以便调试程序入口逻辑。本专利技术通过调试windows服务程序的启动逻辑,便于更清晰的了解当前服务启动时的状态,找到服务程序启动逻辑可能存在的bug。
附图说明
[0037]为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用于Windows系统的调试服务进程的启动方法,其特征在于,包括:创建dll动态链接库;在所述dll动态链接库中添加检测代码,所述检测代码用于检测当前执行的服务进程是否为待调试进程;在所述dll动态链接库中设置调试断点;启动服务进程时,将所述dll动态链接库注入所述服务进程中;重新启动所述服务进程,等待所述服务进程加载所述dll动态库并执行;若当前执行的服务进程为待调试进程,在所述待调试进程的服务启动时,等待所述服务进程在所述调试断点处进入被调试状态。2.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述在所述dll动态链接库中添加检测代码包括:在所述dll动态链接库的主函数中的启动入口处添加检测代码;所述主函数为dllmain函数;所述启动入口的函数为DLL_PROCESS_ATTACH。3.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述检测代码的函数为IsDebuggerPresent。4.根据权利要求2所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,所述在所述dll动态链接库中设置调试断点包括:所述调试断点设置在所述dll动态链接库的主函数中的启动入口后。5.根据权利要求1所述的应用于Windows系统的调试服务进程的启动方法,其特征在于,还包括:若当前执行的服务...

【专利技术属性】
技术研发人员:张宗元姚纪卫
申请(专利权)人:安芯网盾北京科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1