总结,涵盖 安装、配置、连接、调试 四大阶段,
适用于使用 Visual Studio2026 + WinDbg Preview + VMware17 虚拟机 的场景。
🧩 Windows x64 汇编程序远程调试完整指南(主宿主机 ↔ 虚拟机)
目标:在 主宿主机 上使用 WinDbg Preview 远程调试运行在 Windows 10 虚拟机 中的 Asm64.exe 汇编程序。
✅ 第一阶段:安装调试工具(虚拟机中)
- 安装 Visual Studio(含 C++ 桌面开发)
• 打开 Visual Studio Installer
• 勾选工作负载:
✅ 使用 C++ 的桌面开发(Desktop development with C++)
• 确保右侧包含:
• Windows SDK(如 10.0.26100)
• C++ 生成工具
• Debugging Tools for Windows
⚠️ 不要只勾"C++ 构建工具"或"单个组件",必须通过 工作负载 安装! - 验证调试器是否安装成功

bash
同时按下 Win + R 打开"运行"对话框。
输入 cmd。
按下 Ctrl + Shift + Enter(而不是回车)
打开 CMD(管理员),执行:
cmd
编辑
where ntsd
应返回:
text
编辑
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\ntsd.exe

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

- 设置 VMware 网络为 桥接模式(Bridged)
• 虚拟机设置 → 网络适配器 → 桥接模式
• 使虚拟机获得独立局域网 IP(如 192.168.x.x) - 获取虚拟机 IP 地址
bash
在虚拟机中运行:
cmd
编辑
ipconfig
记下 IPv4 地址,例如:192.168.0.107
- 关闭防火墙(临时测试)
bash
cmd
编辑
netsh advfirewall set allprofiles state off
或添加规则允许端口:
cmd
编辑
netsh advfirewall firewall add rule name="WinDbg" dir=in action=allow protocol=TCP localport=50000
✅ 第三阶段:启动远程调试服务器(虚拟机中)
- 以 管理员身份 打开 CMD
- 启动调试服务器
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
• 确保防火墙允许通信
这样你上午的环境就能 无缝继续使用,无需重装或重配!