吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 623|回复: 4
收起左侧

[学习记录] WinDbg如何配置远程调试

[复制链接]
liu1024 发表于 2024-8-8 19:46

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程序。

比如我这里:

01.png

注意看这里有很多的dbgsrv.exe,你该选择哪个呢?这是有讲究的。

如果你是要调试x86程序,那就选择上面红框中的dbgsrv.exe。如果是调试x64程序,那就需要选择amd64目录下的程序。

我曾经在这里吃过亏,一调试就报如下的错误。

07.png

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

02.png

可以输入dbgsrv.exe /?,查看dbgsrv的简单使用方式。

在输入dbgsrv.exe -t tcp:port=18888,要是没有任何的错误表示成功,等待client端连接。

03.png

在client端打开WinDbg,菜单栏中选择File打开,出现如下画面:

按照上面的格式输入tcp:server:192.178.2.10, port=18888,这里其实还加上密码参数更为安全,最后点击OK

04.png

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

05.png
06.png

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地址换成你自己的。

10.png

成功之后在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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Panel 发表于 2024-8-8 20:11
msvsmon调试应用层不是更爽吗
justwz 发表于 2024-8-8 21:36
辰城 发表于 2024-8-9 09:33
在配置远程调试,须保持两端的WinDbg版本一致
byxiansheng 发表于 2024-8-9 13:08
这个可以哦,非常实用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表