win10 + vs2026 远程调试环境

总结,涵盖 安装、配置、连接、调试 四大阶段,

适用于使用 Visual Studio2026 + WinDbg Preview + VMware17 虚拟机 的场景。


🧩 Windows x64 汇编程序远程调试完整指南(主宿主机 ↔ 虚拟机)

目标:在 主宿主机 上使用 WinDbg Preview 远程调试运行在 Windows 10 虚拟机 中的 Asm64.exe 汇编程序。


✅ 第一阶段:安装调试工具(虚拟机中)

  1. 安装 Visual Studio(含 C++ 桌面开发)
    • 打开 Visual Studio Installer
    • 勾选工作负载:
    ✅ 使用 C++ 的桌面开发(Desktop development with C++)
    • 确保右侧包含:
    • Windows SDK(如 10.0.26100)
    • C++ 生成工具
    • Debugging Tools for Windows
    ⚠️ 不要只勾"C++ 构建工具"或"单个组件",必须通过 工作负载 安装!
  2. 验证调试器是否安装成功
bash 复制代码
同时按下 Win + R 打开"运行"对话框。
输入 cmd。
按下 Ctrl + Shift + Enter(而不是回车)

打开 CMD(管理员),执行:
cmd
编辑
where ntsd
应返回:
text
编辑
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\ntsd.exe

✅ 第二阶段:配置网络(VMware + 虚拟机)

  1. 设置 VMware 网络为 桥接模式(Bridged)
    • 虚拟机设置 → 网络适配器 → 桥接模式
    • 使虚拟机获得独立局域网 IP(如 192.168.x.x)
  2. 获取虚拟机 IP 地址
bash 复制代码
在虚拟机中运行:
cmd
编辑
ipconfig
记下 IPv4 地址,例如:192.168.0.107
  1. 关闭防火墙(临时测试)
bash 复制代码
cmd
编辑
netsh advfirewall set allprofiles state off
或添加规则允许端口:
cmd
编辑
netsh advfirewall firewall add rule name="WinDbg" dir=in action=allow protocol=TCP localport=50000

✅ 第三阶段:启动远程调试服务器(虚拟机中)

  1. 以 管理员身份 打开 CMD
  2. 启动调试服务器
bash 复制代码
cmd
编辑
cd "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64"
ntsd -server tcp:port=50000 -noio "C:\Users\wanni\Desktop\Asm64\Asm64\x64\Debug\Asm64.exe"

✅ 成功时会显示:

bash 复制代码
text
编辑
Waiting for client connection on TCP port 50000...
💡 若 ntsd 无响应,可改用 cdb:
cmd
编辑
cdb -server tcp:port=50000 -noio "你的程序路径"

✅ 第四阶段:主宿主机连接并调试(WinDbg Preview)

bash 复制代码
1. 打开 WinDbg Preview(Microsoft Store 安装)
2. 连接远程调试器

•	File → Start debugging → Connect to remote stub
•	输入连接字符串:
text
编辑
tcp:server=192.168.0.107,port=50000

3. 成功连接标志

日志中出现:
text
编辑
DESKTOP-XXXX\user (tcp [...]) connected at ...
Breakpoint hit in ntdll!LdrpDoDebuggerBreak

✅ 第五阶段:调试汇编程序

bash 复制代码
1. 定位 main 函数
dbgcmd
编辑
x Asm64!*main*
返回地址如:00007ff7'd9021010

x Asm64!*main*

DESKTOP-5C1UUIK\lenovo (tcp [::ffff:192.168.0.102]:55923) connected at Sun Dec 28 20:38:47 2025
0:000> x Asm64!*main*
*** WARNING: Unable to verify checksum for Asm64.exe
00007ff7`d9021010 Asm64!main (void)

2. 设置断点并运行到 main
dbgcmd
编辑
bp Asm64!main
g

0:000> bp Asm64!main
0:000> g
Breakpoint 0 hit

3. 查看代码与变量
•	反汇编:
dbgcmd
编辑
u @rip L20
•	查看全局变量(如 num1, flag):

0:000> u @rip L10
Asm64!main:
00007ff7`d9021010 8b05ea2f0000    mov     eax,dword ptr [Asm64!num1 (00007ff7`d9024000)]
00007ff7`d9021016 83f800          cmp     eax,0
00007ff7`d9021019 7c0a            jl      Asm64!main+0x15 (00007ff7`d9021025)
00007ff7`d902101b c705e82f000000000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],0
00007ff7`d9021025 c705de2f000001000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],1
00007ff7`d902102f 8b05cf2f0000    mov     eax,dword ptr [Asm64!num2 (00007ff7`d9024004)]
00007ff7`d9021035 83f800          cmp     eax,0
00007ff7`d9021038 7f0a            jg      Asm64!main+0x34 (00007ff7`d9021044)
00007ff7`d902103a c705c92f000000000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],0
00007ff7`d9021044 c705bf2f000002000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],2
00007ff7`d902104e 8b05ac2f0000    mov     eax,dword ptr [Asm64!num1 (00007ff7`d9024000)]
00007ff7`d9021054 83f800          cmp     eax,0
00007ff7`d9021057 7e0a            jle     Asm64!main+0x53 (00007ff7`d9021063)
00007ff7`d9021059 c705aa2f000000000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],0
00007ff7`d9021063 c705a02f000003000000 mov dword ptr [Asm64!flag (00007ff7`d902400d)],3
00007ff7`d902106d 8b05952f0000    mov     eax,dword ptr [Asm64!num3 (00007ff7`d9024008)]

dbgcmd
编辑
dd Asm64!num1 L1
dd Asm64!flag L1

0:000> dd Asm64!num1 L1  
00007ff7`d9024000  ffffff85
0:000> dd Asm64!num2 L1  
00007ff7`d9024004  000001c8
0:000> dd Asm64!num3 L1  
00007ff7`d9024008  00000000
0:000> dd Asm64!flag L1
00007ff7`d902400d  00000000

4. 单步执行
•	p:执行下一条指令(Step Over)
•	r:查看寄存器
•	r rflags:查看标志位(用于分析 cmp/jge 等)
5. 分析逻辑
根据反汇编和变量值,判断条件跳转是否符合预期。

🛑 常见问题排查

问题 解决方法

ntsd 启动无输出 改用 cdb;检查程序路径;关闭杀毒软件

主宿主机 ping 不通虚拟机 检查 VMware 网络模式(必须桥接)

WinDbg 连接失败(HR=0x8007274C) 检查 IP、端口、防火墙、ntsd 是否运行

flag 值被覆盖 注意代码顺序:后赋值会覆盖前值

符号未加载 确保 .exe 是 Debug 编译,且路径正确


🎯 最终成果

你已实现:

• ✅ 在虚拟机中编译并运行 x64 汇编程序

• ✅ 通过 ntsd/cdb 启动远程调试服务

• ✅ 在主宿主机用 WinDbg Preview 实时调试

• ✅ 查看寄存器、内存、标志位,精准控制程序执行流


💡 提示:此环境也适用于 C/C++、驱动、逆向工程等高级调试场景。

✅ 简短回答:

可以继续用 NAT 模式!不需要改桥接!只要配置正确,NAT 完全支持远程调试。

但你需要 让主宿主机连接虚拟机的 IP(如 192.168.88.136),而不是 Host-only 的 192.168.88.1。


🔍 详细解释:VMware 网络模式与调试关系

🌐 1. NAT 模式(你上午用的)

• 虚拟机会获得一个 私有 IP(如 192.168.88.136)

• 主宿主机通过 VMnet8 虚拟网卡 与虚拟机通信

• 默认情况下,主宿主机是可以 ping 通虚拟机的!

✅ 所以:NAT 模式完全可用于 WinDbg 远程调试,无需改为桥接!

⚠️ 常见误解:

很多人以为 192.168.88.1 是虚拟机 IP ------ 其实它是 VMware 虚拟网关(Host 端)的 IP,不是虚拟机的 IP!

• 虚拟机 IP:192.168.88.136(通过 ipconfig 查看)

• Host 端 VMnet8 IP:192.168.88.1(在主宿主机 ipconfig 中看到)

✅ 正确做法:主宿主机连接 192.168.88.136:50000,不是 192.168.88.1


🌉 2. 桥接模式(Bridged)

• 虚拟机直接接入物理网络,获得和主宿主机同网段的 IP(如 192.168.1.x)

• 更像一台独立电脑

• 适合需要被局域网其他设备访问的场景

❗ 但对 本地主宿主机 ↔ 虚拟机调试 来说,NAT 已足够,且更稳定、更简单


✅ 你现在该怎么做?(保留 NAT 模式)

bash 复制代码
步骤 1:确认虚拟机 IP(在虚拟机中运行)
cmd
编辑
ipconfig
找到类似:
text
编辑
IPv4 地址 . . . . . . . . . . : 192.168.88.136
步骤 2:在主宿主机测试连通性
cmd
编辑
ping 192.168.88.136
✅ 如果通 → 继续
❌ 如果不通 → 检查 VMware NAT 服务是否启动(见下文)
步骤 3:在虚拟机启动调试服务器
cmd
编辑
cdb -server tcp:port=50000 -noio "你的程序路径"
步骤 4:在主宿主机 WinDbg 中连接
text
编辑
tcp:server=192.168.88.136,port=50000
✅ 不是 192.168.88.1!

🛠️ 如果 ping 192.168.88.136 不通?排查 NAT

bash 复制代码
1. 检查 VMware 服务是否运行(主宿主机)
按 Win+R → 输入 services.msc → 确保以下服务 正在运行:
•	VMware NAT Service
•	VMware DHCP Service
2. 重置 VMware 网络(可选)
•	打开 VMware Workstation
•	编辑 → 虚拟网络编辑器 → 恢复默认设置
3. 关闭防火墙临时测试(虚拟机中)
cmd
编辑
netsh advfirewall set allprofiles state off

💡 结论:你不需要改桥接!继续用 NAT,只需确保连接的是虚拟机的真实 IP(如 192.168.88.136)即可。


✅ 最终建议操作

• 保留 NAT 模式

• 在虚拟机中运行 ipconfig,记下真实 IP(如 192.168.88.136)

• 主宿主机连接这个 IP + 端口 50000

• 确保防火墙允许通信

这样你上午的环境就能 无缝继续使用,无需重装或重配!

相关推荐
Lion Long2 小时前
在 Windows 上快速搭建 VSCode 的 C++ 开发环境(基于 WSL)
linux·c++·windows·vscode·wsl
染指11102 小时前
22.全局句柄表-Windows驱动
windows·内核·句柄表
非凡ghost11 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
时光803.11 小时前
快速搭建青龙面板Docker教程
windows·ubuntu·bash·httpx
ComputerInBook16 小时前
函数调用栈帧分析(Windows平台)
c语言·windows·编译原理·汇编语言·c++语言
Halo_tjn16 小时前
Java List集合知识点
java·开发语言·windows·算法·list
染指111018 小时前
20.过保护句柄提权和黑客工具检测-Windows驱动
windows·驱动开发·windows驱动
守城小轩18 小时前
Chromium 142 编译指南 Windows篇:Git 配置与安装(二)
windows·chrome devtools·指纹浏览器·浏览器开发
zzcufo21 小时前
wincc VBS 中的 Round() 函数详解
windows·笔记