首页 > 编程语言 >windbg调试服务程序

windbg调试服务程序

时间:2022-11-07 20:34:38浏览次数:39  
标签:服务程序 管理器 windbg 启动 服务 调试


    相比通过输出日志来跟踪程序运行状态,我更倾向使用调试器。虽然我早知调试服务很麻烦,总不会比调试驱动还麻烦吧?基于这个想法,我尝试了在win7上使用windbg调试服务并记录于此。

    windows上服务程序可分为两部分:服务安装程序和后台服务程序本身。服务安装程序路数比较固定,几乎不会出错,所以本文仅记录了调试后台服务程序的过程。我在服务管理器中创建了一个显示名为test的服务,ImagePath为:C:\Users\Administrator\Desktop\svr\Debug\srv.exe。

1.设置srv.exe,使其启动时自动启动windbg,这么设置的原因是为了方便调试服务的入口函数ServiceMain。用管理员权限开启windbg目录下的gflags.exe,在"Image File"标签页中填写Image名字(不用写全路径,当exe启动时,加载器会搜索注册表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\image file execution options下的项,如果有同名项,就为其加载Debugee)和调试器的路径。

windbg调试服务程序_服务程序

2.设置test服务的属性,允许服务以交互式启动。

windbg调试服务程序_windows_02

(一般情况下,这样设置就可以在服务管理器中右键启动服务。但是有些机器可能会失败,这可能是注册表路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows\NoInteractiveServices被置1----禁止服务交互)

3.设置结束后,即可在服务管理器中右键启动服务。启动时,Win7会弹出"Interactive Services Detection"对话框,选"View the message"即可以windbg调试的方式启动服务。

windbg调试服务程序_启动服务_03

4.刚进入服务时,程序其实停留在main函数的StartServiceCtrlDispatcher函数内,尚未调用服务入口函数ServiceMain。这时需要尽快恢复程序执行让它今早执行完StartServiceCtrlDispatcher函数,否则服务管理器会因为长时间收不到来自服务的消息而终止服务的运行。(参见<深入解析Windows操作系统>4.2 服务启动 一节)。为了能使windbg在ServiceMain处中断,可以在服务入口加 int 3断点。之后,我们就可以慢慢的设置调试符号/下断点等。

windbg调试服务程序_windows_04

5.另外,除了这种调试方式,还有Attach进程的调试方式。这种方式适合在确定ServiceMain没有问题后,调试服务创建的子线程。

标签:服务程序,管理器,windbg,启动,服务,调试
From: https://blog.51cto.com/u_13927568/5831326

相关文章

  • 调试遗漏IoStartNextPacket引起的阻塞
       前面​​driververifier检测驱动死锁 ​​一文中本想检测一下驱动中潜在的死锁来解决驱动无响应的bug,然而并没有实质性的进展。后来通过一系列的调试终于找到了......
  • windbg中通过文件句柄查找设备(!handle/!fileobj/!devobj命令)
      有时,在驱动程序中会调用ZwCreateFile获得设备句柄,然后保存在设备扩展区域中供其他例程使用。由于驱动程序经常被动调用----执行的上下文可能不是同一个线程----会获得......
  • windbg调试窗口过程WindowProc(winxp 32bit)
      ollydbg在调试窗口程序方面做得很便捷,虽然windbg在这方面不如od,但通过命令的组合也能达到类似的效果。我借winxp的calc.exe为例来谈谈如何用windbg调试窗口过程。 ......
  • windbg中所谓的上下文
      <软件调试>30.7节简要的提到了windbg调试上下文的概念:如会话/进程/寄存器等上下文。为了深入了解背后的含义,我翻开windbg帮助文档,发现其对进程/寄存器上下文的解释最......
  • 编写windbg调试器扩展 入门篇1
      我博客的左侧专栏曾经转过windows下编写调试器的一系列文章,这类文章是从零打造调试器,而这篇文章是介绍如何为windbg编写调试器扩展命令。0.前言  windbg的命令......
  • Linux性能调试——stress压测工具详解
    目录一.stress简介1.stress简介2.stress安装二.stress使用1.stress命令2.使用三.stress测试场景四.stress-ng简介1.stress-ng简介2.stress-ng安装3.stress-ng命令一.stres......
  • 移动端调试工具
    移动端调试工具一般都用的VConsole现在分享一个其他调试工具 eruda个人感觉挺好用的//调试工具https://cdn.jsdelivr.net/npm/eruda除VConsole外另一个移动端调试......
  • NodeJs断点调试详细说明
    node在运行js的时候,可以传递参数让其运行在调试模式,运行在调试模式后,引擎会向某个端口发送调试相关信息。一、在devTools中调试1.在chrome中接收调试信息在浏览器上打开:ch......
  • node.js inspect 浏览器 断点调试技巧与原理
    做前端开发你一定会用到浏览器自带的各种调试工具firebug谷歌的debugtools等,我们太过于熟悉使用这些工具了,以致于在node开发中同样的js文件我们是否也可以用浏览器就行调......
  • sshd开启调试模式
    今天使用私钥方式无法登录服务器,做了以下排查,都没解决问题:1.删除root目录下.ssh目录,重新解压自己秘钥2.查看.ssh目录及子文件权限3.替换正常的sshd_config文件只能尝试......