WinDbg配置远程调试
WinDbg配置远程调试
1、为什么需要远程调试
某些特殊的场合需要远程调试,如:
①调试特殊的程序,比如在调试全屏程序,内核。
②需要别人帮助调试或者帮助别人调试。比如由于商业性质不能直接给你pdb和源代码。
③还有一类就是在指定的机器上复现,此时dump也不好使。(下一篇文章我会介绍)
2、支持的远程协议有哪些?
从微软的官方文档来看,协议很丰富。有TCP,PIPE,SSL,COM,1394。其中最古老的要属1394,至今某些台式机器仍然保留这一接口。
3、介绍tcp协议方式
在这篇文章,我主要介绍tcp的方式。
注意:在配置远程调试,须保持两端的WinDbg版本一致。
我们先介绍下模式,既是远程调试,那就分为server端和client端。
举个例子:我现在有个疑难杂症搞不定,需要同事帮忙解决。我需要开启WinDbg的server模式,那我就是server端。同事连接进来就是client端。
有两种方式启动远程调试。这两种方式各一点差异,一个需要懂点WinDbg知识,一个就是类似小白模式。
3.1 小白模式
在安装WinDbg的目录中找到DbgSvr程序。
比如我这里:

注意看这里有很多的dbgsrv.exe,你该选择哪个呢?这是有讲究的。
如果你是要调试x86程序,那就选择上面红框中的dbgsrv.exe。如果是调试x64程序,那就需要选择amd64目录下的程序。
我曾经在这里吃过亏,一调试就报如下的错误。

以管理员的权限打开cmd,进入此目录,如果不想每次这么麻烦就可以把此路径加入环境变量path中。下次开机就可以生效。

可以输入dbgsrv.exe /?,查看dbgsrv的简单使用方式。
在输入dbgsrv.exe -t tcp:port=18888,要是没有任何的错误表示成功,等待client端连接。

在client端打开WinDbg,菜单栏中选择File打开,出现如下画面:
按照上面的格式输入tcp:server:192.178.2.10, port=18888,这里其实还加上密码参数更为安全,最后点击OK

如果连接没有问题就会出现如下的画面,我们在server端再起一个notepad进程。


3.2 入门模式
比如我现在正在调试notepad.exe,在server端的WinDbg命令行输入.server tcp:port=18888,password=abcc
0:009> .server tcp:port=18888, password=abcc
Server started. Client can connect with any of these command lines
0: <debugger> -remote npipe:Pipe=DbgX_10353c0f6e1d413fb8a6a0f047ef46eb,Password=*,Server=192.168.2.10
1: <debugger> -remote tcp:Port=18888,Server=192.168.2.10
在client端,打开WinDbg,输入tcp:server=192.178.2.10,port=18888, password=abcc,这里需要把ip地址换成你自己的。

成功之后在client端显示的画面:
0:009> .server tcp:port=18888, password=abcc
Server started. Client can connect with any of these command lines
0: <debugger> -remote npipe:Pipe=DbgX_10353c0f6e1d413fb8a6a0f047ef46eb,Password=*,Server=192.168.2.10
1: <debugger> -remote tcp:Port=18888,Server=SIH-D-697.cn.net.ntes
192.168.2.10 (tcp [::ffff:192.168.2.10]:51941) connected at Mon Aug 5 20:01:37 2024
server端显示的画面:
0:009> .server tcp:port=18888, password=abcc
Server started. Client can connect with any of these command lines
0: <debugger> -remote npipe:Pipe=DbgX_10353c0f6e1d413fb8a6a0f047ef46eb,Password=*,Server=192.168.2.10
1: <debugger> -remote tcp:Port=18888,Server=SIH-D-697.cn.net.ntes
192.168.2.10 (tcp [::ffff:192.168.2.10]:51941) connected at Mon Aug 5 20:01:37 2024
之后你在client输入的命令就会同步到server端的WinDbg。
此时可以在client端的WinDbg输入k:
0:009> k# Child-SP RetAddr Call Site
00 000000f9`fb1ffd38 00007fff`9e07cafe ntdll!DbgBreakPoint
01 000000f9`fb1ffd40 00007fff`9d127374 ntdll!DbgUiRemoteBreakin+0x4e
02 000000f9`fb1ffd70 00007fff`9dffcc91 KERNEL32!BaseThreadInitThunk+0x14
03 000000f9`fb1ffda0 00000000`00000000 ntdll!RtlUserThreadStart+0x21
相关文章:
WinDbg配置远程调试
WinDbg配置远程调试 1、为什么需要远程调试 某些特殊的场合需要远程调试,如: ①调试特殊的程序,比如在调试全屏程序,内核。 ②需要别人帮助调试或者帮助别人调试。比如由于商业性质不能直接给你pdb和源代码。 ③还有一类就是…...
spl注入实战thinkphp
目录 一、环境的部署 二、本地创建数据库 三、填写数据库连接文件 四、编写控制器 五、访问分析 debug报错会显示物理路径 原因是config.php文件相关配置 六、注入分析 七、进入断点调试 八、通过mysql执行语句查看结果 九、总结: 一、环境的部署 二、本地…...
整理深度学习时最常用的Linux命令(自用)
清华大学镜像源: https://pypi.tuna.tsinghua.edu.cn/simple/tar文件解压 tar -xzvf xxx.tar.gztar xvf xxx.tarzip文件解压 unzip xxx.zip -d path/to/your/fold清理GPU异常内存占用 杀掉 1 号显卡的所有进程 fuser -v /dev/nvidia1 | xargs -t -n 1 kill -9杀掉…...
LVS——>linux 虚拟服务器知识汇总
一、概念: LVS(Linux Virtual Server),是Linux Virtual Server的简写,也就是Linux 虚拟服务器,是一个虚拟的服务器集群系统负载均衡解决方案,它将一个真实服务器集群虚拟成一台服务器来对外提供…...
AI赋能周界安防:智能视频分析技术构建无懈可击的安全防线
周界安全防范是保护机场、电站、油库、监狱、工业园区等关键设施免受非法入侵和破坏的重要措施。传统的周界安防手段主要依靠人员巡查和物理屏障,但这种方式不仅人力成本高,而且效率较低,难以满足日益复杂多变的安全需求。随着AI技术的引入&a…...
FastAPI+Vue3工程项目管理系统项目实战私教课 上课笔记20240808 课程和学习计划制定
学习目标 将Word和Excel做的东西放到数据库里面去工程类公司,甲方,劳务存到数据库存储的信息主要是人员的信息 基本信息: 人员信息,资料库,甲方的人出现在哪些项目上,考勤材料信息,进货记录&…...
Robot Operating System——发布相对湿度数据
大纲 应用场景定义字段解释 案例 sensor_msgs::msg::RelativeHumidity 是 ROS (Robot Operating System) 中的一个消息类型,用于表示相对湿度数据。 应用场景 环境监测 气象站:在气象站中,相对湿度传感器可以用于监测环境湿度,帮…...
一文搞懂后端面试之不停机数据迁移【中间件 | 数据库 | MySQL | 数据一致性】
数据迁移方面的工作: 重构老系统:使用新的表结构来存储数据单库拆分分库分表、分库分表扩容大表修改表结构定义 数据备份工具 MySQL上常用的两款数据备份工具:mysqldump和XtraBackup mysqldump:一个用于备份和恢复数据库的命令…...
【ESP01开发实例】- ISD1820录音控制
ISD1820录音控制 文章目录 ISD1820录音控制1、ISD1820模块介绍2、硬件准备及接线3、代码以实现录音技术已经取得了长足的进步,它已成为从语音助手到安全系统的各种应用不可或缺的一部分。如果您有兴趣构建自己的录音系统,将 ISD1820 模块与 ESP01 微控制器相结合可能是一个不…...
Linux驱动面试高频考点后面继续改整理
Linux驱动开发是将硬件设备与操作系统内核连接起来的重要环节,它涉及到设备模型、中断处理、文件操作等方面,是一项挑战性且充满乐趣的工作。今天给大家分享45道Linux驱动面试高频考点,直接上干货。 1、驱动程序分为几类? 内核驱动…...
【Python】nn.ConvTranspose1、2、3d()函数详解和示例
前言 在深度学习中,特别是在处理图像、音频和三维数据时,转置卷积(Transposed Convolution)或称为反卷积(Deconvolution)是一种非常重要的操作。PyTorch提供了nn.ConvTranspose1d、nn.ConvTranspose2d和nn…...
vtkConnectivityFilter提取连通区域中的问题
直接使用vtkConnectivityFilter提取连通区域,渲染上没问题,但是打印出polydata中的点数,发现跟原始数据是一致的。 for (int i 0; i < numRegions; i){vtkSmartPointer<vtkConnectivityFilter> connectivityFilter vtkSmartPointe…...
购物系统小程序的设计
管理员账户功能包括:系统首页,个人中心,商品分类管理,商品信息管理,特价商品管理,用户管理,留言板管理,订单管理,系统管理 微信端账号功能包括:系统首页&…...
做报表用什么工具?不想再用Excel了!!!
一、什么是中国式报表? 不知道大家现在还是使用Excel来制作报表,然后跟领导汇报工作吗?虽然Excel功能很强大,但是用Excel做过中国式报表的小伙伴一定知道它的制作过程有多复杂。 中国式报表可以用一句话简单概括:格式…...
c++实现学生管理系统(附源码)
目录 一、基本功能: 二、包含的模块: 三、系统介绍 1. 学生管理系统的功能: 2. 具体的需求: 3. 支持的标准: 四、系统结构功能图: 五、系统设计 1. 退出系统: 2. 增加学生:…...
JS防抖是什么?干嘛用的?
你好同学,我是沐爸,欢迎点赞、收藏和关注!个人知乎 防抖在前端开发中可以说经常用到,有诸多使用场景。接下来我们一起看下防抖的定义、防抖函数的实现、应用场景、lodash防抖函数以及防抖在框架中的使用。Let’s go 一、什么是防…...
Linux磁盘管理与文件系统(二):实用工具和命令、fdisk分区示例
文章目录 4、查看或管理磁盘分区-fdisk格式选项示例 4、示例:使用 fdisk 命令创建分区需求操作步骤 5、创建文件系统-mkfs格式常用选项示例创建其他类型的文件系统 6、创建文件系统-mkswap格式常用选项示例拓展:关闭和启用交换分区拓展:swap分…...
使用vtkRenderer创建的显示点云的窗口如何刷新(QT/C++)
一、使用vtkRenderer创建点云显示窗口,参考 在Qt创建的UI中放一个显示点云的窗口(PCLQT5)_pcl点云和qt-CSDN博客 二、刷新vtkRenderer创建的窗口 使用场景:在某些情况下代码中需要对显示窗口的显示物改动,例如通过滑…...
Mysql绕过小技巧
上源码。 <?php $mysqli new mysqli("localhost", "root", "root", "security");/* check connection */ if ($mysqli->connect_errno) {printf("Connect failed: %s\n", $mysqli->connect_error);exit(); }$my…...
气象大数据案例项目(求各气象站的平均气温)
气象大数据案例项目(求各气象站的平均气温) 一、项目需求二、数据格式三、项目开发3.1 在windows 进行开发3.2 运行结果3.3 对项目打包 一、项目需求 现在有一份来自美国国家海洋和大气管理局的数据集,里面包含近30年每个气象站、每小时的天…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
