双机调试环境搭建 windbg + virtualkd

这篇具有很好参考价值的文章主要介绍了双机调试环境搭建 windbg + virtualkd。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 环境准备

  1. VMware Workstations (笔者用的版本是16)
  2. 虚拟机Win7 x86 sp1 旗舰版
  3. 主机环境
    1. Microsoft Windows 版本 10.0.19042.1083(命令行输入VERWINVER查看)
    2. Visual Studio2019 + Windows driver Kit 10.0.19041.685 + Windows Software Development Kit - Windows 10.0.19041.685(VS 2019装好后应该默认的SDK就是,可在控制面板中查看是否安装),这两的SDK最好和WDK版本一致。
    3. DriverMonitor,这个是用来在调试时加载驱动的

上述工具大家可自行百度,还是很好解决的

2. 单独的windbg双机配置

VM(虚拟机)里的OS 称为GuestOS 物理机里的OS 称为HostOS,一般情况下在安装上述环境后windbg就已经存在了,无需单独安装

2.1 设置GuestOS环境

  1. 编辑虚拟机设置,将虚拟机的软盘移除掉(在安装VMTools时不删除软盘一直无法安装)
  2. 编辑虚拟机设置,将虚拟机的打印机移除掉(打印机占了一个串口)
  3. 编辑虚拟机设置,添加一个串口设备,使用有名管道,并将管道名设置为:\\.\pipe\com_1
    1. 管道名必须唯一
    2. 轮询(Polling)I/O方式,也称作程序控制I/O方式,是让CPU以一定的周期按次序查询每一个外设,看它是否有数据输入或输出的要求,若有,则进行相应的输入/输出服务;若无,或I/O处理完毕后,CPU就接着查询下一个外设。
  4. 创建虚拟机的调试环境 (最终是创建一个Windows调试环境的启动项)
    1. 管理员运行cmd
    2. 运行 bcdedit,查看当前启动项
    3. 建立新的启动项 bcdedit /copy {current} /d "Win7-双机调试模式"
    4. 重启虚拟机并选择Win7-双机调试模式,后以管理员身份重新运行cmd
    5. 设置新的启动项
      1. 关闭强制数字签名(驱动程序正常运行时需要数字签名)
        bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS
        注意:关闭时使用bcdedit -set loadoptions DENABLE_INTEGRITY_CHECKS
      2. 开启系统的测试模式
        bcdedit /set testsigning on
        注意:关闭时使用bcdedit /set testsigning off
      3. 开启操作系统内核调试
        bcdedit /debug ON
      4. 开启应用程序调试
        bcdedit /bootdebug ON
      5. 设置启动管理器的超时值
        bcdedit /timeout 10
      6. 查看当前调试配置
        bcdedit /dbgsettings
        输出内容通常为:
        	debugtype		Serial
        	debugport		1
        	baudrate		115200
        注意:
        	debugport要与vmware为虚拟机添加的端口号一直,否则无法通信,可以使用bcdedit /dbgsettings serial debugport:1 baudrate:115200进行调整
        	debugport:1对应的是虚拟机中串行端口COM1
        	baudrate为波特率,与其相关的几个概念如下:
        		1. 码元
        		2. 码元速率
        		3. 比特率
        		4. 波特率
        

2.2 设置HostOS环境

  1. 给windbg设置启动参数,给windbg创建桌面快捷方式
    在快捷方式的目标中追加参数-b -k com:pipe,port=\\.\pipe\com_1,baud=115200,reconnect –y SRV*D:\Symbols\x86_symbols*http://msdl.microsoft.com/download/symbols",参数说明如下:
    1. -b
      1. 指定启动windbg后立即连接到GuestOS中
      2. 在GuestOS重启内核初始化时,windbg将立即连接到GuestOS中
    2. -k com:pipe,port=\\.\pipe\com_1,baud=115200
      1. -k 用来指定连接的类型
      2. com:pipe 通过命名管道连接,其中port表示有名管道,baud表示波特率
      3. restart=0:当主控机和目标机重新同步时,发送给目标机的重置包个数,这包的个数没有限制。对于Microsoft Virtual PC和其他丢弃管道中多余数据的虚拟机,使用resets=0 参数。对于VMware 或其他不丢弃管道的多余数据的虚拟机,不要这样使用。
      4. reconnect:当调试器当管道读/写错误时,自动断开并重连。如windbg启动是没有找到管道名,则reconnect会使windbg一直等待正确的管道出现。对Virtual PC和其他在重起虚拟机时销毁并重建管道的虚拟机使用reconnect。对于VMWare和其他在重起计算机时保留管道的虚拟机不要使用该参数。
        关于Microsoft Virtual PC:Virtual PC是微软之前搞的东西与VMare类似的东西(从来没用过!!!)
    3. -y SRV*D:\Symbols\x86_symbols*http://msdl.microsoft.com/download/symbols
      1. -y 用来指定Symbol(调试符号既pdb文件)路径
      2. SRV*D:\Symbols\x86_symbols*http://msdl.microsoft.com/download/symbols 表示从http服务加载Symbol并将其存放到D:\Symbols\x86_symbols(Windows内核调试符号以前是有离线版的,但是现在都被微软给搬到服务器上了)

2.3 Windbg测试

  1. 启动windbg,显示Waiting to reconnect...此时要开启GuestOS
  2. 开启虚拟机并选择Win7-双机调试模式[启用调试程序]
  3. 在虚拟机启动的过程中windbg会收到int 3指令,此时输入g运行即可
  4. 待虚拟机启动后右下角会有测试模式水印

以上步骤正常完成表示配置OK

3. 使用Virtualkd/VirtualKD-Redux进行双机调试

在使用windbg进行调试的时候会出现调试运行过慢的情况,此时就需要使用Virtualkd/VirtualKD-Redux进行加快windbg的调试速度了,VirtualkdVirtualKD-Redux的区别在于,VirtualKD-Redux适用于VMware为15.5及以上的版本文章来源地址https://www.toymoban.com/news/detail-465965.html

3.1 Virtualkd双机调试配置

  1. 下载Virtualkd(官网提供下载)
  2. 解压下载包,并将里面的target文件夹拷贝被到GuestOS中,进行安装vminstall.exe(有个win10才需要的选项没有选,笔者用的是win7),安装完后会重启,重启之敲回车就会以Virtualkd创建的启动项进入系统
  3. HostOS运行vmmon.exe(32位机器上运行)或vmmon64.exe
  4. 点击Debugger path...选择windbg
  5. 选择要调试的VM项,点击Run debugger,之后如果正常的话就会出现windbg的界面,然后大家就可以随心所欲的操作了

3.2 VirtualKD-Redux双机调试配置

  1. 下载VirtualKD-Redux(Git上有安装包)
  2. 解压下载包,将target32拷贝到GuestOS中运行vminstall.exe(有个win10才需要的选项没有选,笔者用的是win7),安装后会重启,重启后按F8选择禁用驱动签名强制,进入系统
  3. 之后就参见3.1 Virtualkd双机调试配置后续的相关描述

4. VS2019 调试

4.1 VS配置

  1. 点击扩展(X) -> Driver -> Test -> Configure Devices... -> Add New Device
  2. 填写Display name(为调试目标起名字)
  3. 填写Network host name(调试目标的主机名),可在GuestOS 中打开cmd输入hostname进行查看
  4. 选择Manually configure debuggers and do not provision,进行手动配置,点击下一步
  5. 进行内核模式配置
    1. 连接类型选择Serial
    2. 波特率设置115200(根据GuestOS中配置的设置)
    3. 勾选Pipe,这里我没有勾选reconnect原因参见reconnect的相关描述
    4. 设置Pipe name\\.\pipe\com_1,与GuestOS设置的一样,或将com_1替换为vmmon64.exe界面所显示的通道名称
    5. Target Port设置为空,原因在于使用的是com:pipe连接而不是com:port
  6. 点击下一步,检查下内核模式的配置信息,忽略测试的状态即可
  7. 点击Apply -> OK

4.2 代码编写

  1. 创建WDM空项目
  2. 创建main.c文件,不要用.cpp后缀
  3. 代码
    #include <ntddk.h>
    NTSTATUS DriverUnload(PDRIVER_OBJECT driver)
    {
    	DbgPrint("MY FIRST DEVICE:%ws Unload\n", driver->DriverName.Buffer);
    	return STATUS_SUCCESS;
    }
    NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
    {
    	DbgPrint("MY FIRST DEVICE:%ws\n", reg_path->Buffer);
    	driver->DriverUnload = DriverUnload;
    	return STATUS_SUCCESS;
    }
    
    

4.3 项目配置

  1. 选择x86模式
  2. 将警告等级设置为/W3
  3. 关闭将警告视为错误选项
  4. 将Spectre Mitigation设置为Disabled
  5. Dirver Settings中的Target OS Version设置为Windows 7
  6. Driver Signing中的Sign Mode 设置为off
  7. InfCat中的Run Inf2Cat设置为
  8. Dirver Files文件过滤器下的.inf安装文件从项目中移除
  9. 编译

4.4 调试

  1. DriverMonitor拷贝到虚拟机中
  2. 将编译好的驱动文件.sys文件拷贝到虚拟机
  3. 在虚拟机中打开DriverMonitor,点击Open Driver并选择拷贝到虚拟机中的驱动文件
  4. 在VS中选择附加进程调试,连接类型选择Windows Kernel Mode Debugger,连接目标选择要连接的虚拟机,进程选择Kernel,点击附加
  5. 在VS进入调试状态后先点击一次全部中断(主要是让调试器连接到虚拟机),中断之后点击继续
  6. DriverEntry函数中打一个断点
  7. 在虚拟机的DriverMonitor软件中点击Start Driver ,此时VS中的断点会被触发,触发后在VS中按F5
  8. 在虚拟机的DriverMonitor软件中点击End Driver 卸载驱动

到了这里,关于双机调试环境搭建 windbg + virtualkd的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 调试linux内核(1): 环境准备和原理介绍

    现在流行的开源项目经历了长时间的开发, 积累了大量的代码, 想要一行一行地阅读代码去学习开源项目, 需要的时间成本是巨大的. 所以, 我们也需要用一种高效的方式去\\\"阅读\\\"代码. 计算机科学发展到现在, 产生了很多高效成熟的工具, 调试器就是其中之一(扯句题外话, 那些大

    2024年02月14日
    浏览(39)
  • Net 高级调试之四:Windbg 动态调试

    一、简介 今天是《Net 高级调试》的第四篇文章。到今天为止,也有三篇文章了,对 Windbg 也有初步的认识了,当然,一个工具流畅、熟练的使用,对于我们调试 Net 程序是至关重要的。在前几篇文章的基础上,我们这篇文章主要介绍一些和使用 Windbg 有关的命令和操作。就我

    2024年02月06日
    浏览(45)
  • Windows安装WinDbg调试工具

    微软官网下载SDK的地址,有win11,win10,win8,win7,其他 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/ 打开windbgInstallersX64 Debuggers And Tools-x64_en-us.msi 要安装对应系统位数 不然打不开 安装完成后没有反应。 开始菜单有 如果找不到可以从右侧路径找 官网 https://www.intel.

    2024年02月05日
    浏览(45)
  • K8S搭建(centos)一、环境准备

    天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 K8S搭建(ubuntu)系列: k8s搭建(详细演示完整一篇) k8s搭建(二、k8s组件安装) K8S搭

    2024年01月23日
    浏览(58)
  • WinDbg调试器详解:简介、下载和常用命令

    了解WinDbg调试器的功能与用途,包括简介、下载方法以及常用命令的分类和示例。提供WinDbg调试器的基本知识,帮助您更好地利用这一强大工具进行调试和故障定位。

    2024年01月24日
    浏览(50)
  • 揭开ChatGPT面纱(1):准备工作(搭建开发环境运行OpenAI Demo)

    本博客的gitlab仓库:地址,本博客对应01文件夹。 随着人工智能技术的飞速发展,ChatGPT作为其中的佼佼者,已经逐渐从实验室走向了公众视野。它不仅仅是一个简单的聊天机器人,而是代表了自然语言处理(NLP)领域的前沿技术。在ChatGPT的帮助下,我们能够实现更自然、更

    2024年04月26日
    浏览(53)
  • 【React 入门实战篇】从零开始搭建与理解React应用-二、前置准备与环境搭建

    二、前置准备与环境搭建 2.1 安装Node.js与npm 在开始React开发之前,我们需要确保Node.js和npm(Node Package Manager)已经安装在我们的计算机上。Node.js是一个基于Chrome V8引擎的JavaScript运行环境,而npm则是Node.js的包管理器,用于安装和管理JavaScript库和工具。 安装Node.js: 访问Node.js官

    2024年04月10日
    浏览(85)
  • MATLAB与ROS联合仿真——ROS环境搭建及相关准备工作(下)

       本篇文章主要介绍在安装完ROS后,在进行MATLAB与ROS联合仿真之前,需要进行的一些环境搭建以及准备工作,主要分为 创建ROS工作空间及功能包、必备功能包安装、安装Gazebo11、导入实验功能包至工作空间、安装Visual_Studio_Code(选做)、常用便捷工具安装(选做) 六部分。

    2024年02月16日
    浏览(47)
  • 小白的Linux系统学习之路——学前准备(了解Linux、搭建Linux环境)

    ✨✨欢迎来到T_X_Parallel的博客!!       🛰️博客主页:T_X_Parallel       🛰️专栏 : Linux       🛰️欢迎关注:👍点赞🙌收藏✍️留言       🛰️友友们的支持是本博主更新的动力 怎么和腾讯一样是一只企鹅 Linux,全称GNU/Linux,是一套免费使

    2024年02月07日
    浏览(47)
  • windbg-windows调试工具来抓端游crash dump

    windbg下载有两种方式: Install WinDbg - Windows drivers | Microsoft Learn 从微软应用商店下载 dump上的windows的局部变量解析部分进行windbg本地解析查看 下载对应crash链接中的dmp(即minidump)、pdb、exe文件至本地 打开winDbg工具,进行配置 配路径:Settings —— Debugging settings—— Source path配

    2024年02月19日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包