在windows主机中,我们可以使用WinDBG和串口通信来连接windows内核,最简单的方法是使用VirtualKD。
现在的问题是,是否有可能使用 MacOS 主机和 VMware Fusion 做同样的事情(VirtualKD/WinDBG 替代方案)?我可以使用 GDB 远程调试,或者我必须进行主机到主机(VM 到 VM)的调试,甚至可以使用两个 VM 进行内核调试?
谢谢
在windows主机中,我们可以使用WinDBG和串口通信来连接windows内核,最简单的方法是使用VirtualKD。
现在的问题是,是否有可能使用 MacOS 主机和 VMware Fusion 做同样的事情(VirtualKD/WinDBG 替代方案)?我可以使用 GDB 远程调试,或者我必须进行主机到主机(VM 到 VM)的调试,甚至可以使用两个 VM 进行内核调试?
谢谢
是的,您可以使用两个 VM 进行内核调试。您将需要连接他们的串行端口。
http://www.vmware.com/support/ws3/doc/ws32_devices3.html#1023828
以上是针对Windows的。OS X 设置需要手动完成:http : //www.dcl.hpi.uni-potsdam.de/research/WRK/2011/01/running-wrk-on-mac-os-with-vmware-fusion/index .html
在 WinDbg/IDA 端的连接字符串中使用串行端口,而不是您可能习惯的管道。
VirtualKD 仅适用于在 Windows 主机上运行的 VMWare,因此它在这里无济于事。
GDB 调试也总是可能的(通过debugStub.*
设置)。优点是您不需要第二个 VM,并且可以调试任何东西,包括 BIOS 和内核的任何部分。缺点是您没有 WinDbg 提供的良好元信息,例如模块、进程和符号。
在提升的命令提示符中打开目标 VM:
bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200
关闭目标(被调试者)和开发(调试器)VM 的电源。
导航到每个 VM 的 .vmwarevm 包,右键单击,选择“显示包内容”(或 cd 进入 VM 的包)。
删除对现有serial0
端口的所有引用,该端口用于无配置打印。复制并粘贴下面的配置,必要时对其进行修改。
serial0.present = "TRUE"
serial0.pipe.endPoint = "client" # change to "server" for the target VM
serial0.fileType = "pipe"
serial0.yieldOnMsrRead = "TRUE"
serial0.startConnected = "TRUE"
serial0.fileName = "/tmp/kdpipe" # or any other world-writeable path
打开您的虚拟机,并使用来自开发虚拟机的 Windbg 通过 com0 进行连接。
瞧
根据我的经验 VirtualKD 在此设置中不起作用。我试图让 VisualDDK(同一个人并使用 VirtualKD)在这个确切的设置中工作,但没有任何乐趣。最后,我在 Mac 上安装了 bootcamp,Windows 7 作为主机,VMWorkstation 运行我的目标。一切都很好,而且都是肉汁。