WinDBG 是在windows平台下,强大的用户态和内核态调试工具,相比较于Visual Studio它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能却比VS更为强大,WinDBG由于是微软的产品所以能够调试Windows系统的内核,另外一个用途是可以用来分析dump数据,本笔记用于记录如何开启Windows系统内核调试功能,并使用WinDBG调试驱动。

1.首先需要安装VmWare虚拟机,并自行安装好Windows 10系统,虚拟机关闭状态下添加一个管道虚拟串口,此处需要删除打印机,否则串口之间冲突。

操作步骤:编辑虚拟机设置 -> 添加 -> 串行端口 -> 完成

参数配置:使用命名管道 -> \\.\pipe\com_1 -> 该端是服务器,另一端是应用程序 -> 轮询时主动放弃CPU->确定

2.开启虚拟机中的Windows系统,然后以管理员身份运行CMD命令行,输入bcdedit命令,可以查看到系统的当前启动项,如果是新的系统,则只会有{current}启动项以及一个{bootmgr}项。

连续执行下方的三条命令,依次建立启动项,并激活调试模式。

C:\LyShark > bcdedit /set testsigning on
C:\LyShark > bcdedit -debug on
C:\LyShark > bcdedit /bootdebug on
C:\LyShark > bcdedit /set "{current}" bootmenupolicy Legacy // 修改启动方式为Legacy
C:\LyShark > bcdedit /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200 // 设置串口1为调试端口波特率为115200
C:\LyShark > bcdedit /copy "{current}" /d "Debug" // 将当前配置复制到Debug启动配置
C:\LyShark > bcdedit /debug "{<新建的启动配置的标识符>}" on // 打开调试开关

一气呵成,但需要注意{<新建的启动配置的标识符>}需替换成{bdb0b3b6-3f21-11ed-9931-d46011246f28}标志,如下所示。

3.最后查看一下当前调试配置选项,执行命令 bcdedit /dbgsettings,显示出使用的第一个串口,波特率为115200bps,保持默认不需要修改。

4.配置完成后,重新启动系统,在开机的时候选择Windows10 [启用调试程序]则系统会黑屏,说明已经正常进入调试模式了。

5.回到物理机上面,我们在命令行中切换到WinDBG的根目录下,并执行以下命令,即可连接虚拟机串口进行调试了。

  • 执行命令 windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe 如下图

6.至此我们还需要加载符号,在命令行下依次执行以下命令,配置好符号加载并启动系统。

kd> .sympath SRV*c:\mySymbols*http://msdl.microsoft.com/download/symbols
kd> .reload
kd> g
kd> g
kd> ed nt!Kd_SXS_Mask 0
kd> ed nt!Kd_FUSION_Mask 0
kd> u KiSystemServiceUser

这样即可完成配置操作。

7.最后我们配置测试一下调试功能,首先编写以下代码,代码中使用DbgBreakPoint()设置断点,将会在入口处中断。

#include <ntifs.h>

NTSTATUS DriverDefaultHandle(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
NTSTATUS status = STATUS_SUCCESS;
pIrp->IoStatus.Status = status;
pIrp->IoStatus.Information = 0;
IoCompleteRequest(pIrp, IO_NO_INCREMENT); return status;
} VOID UnDriver(PDRIVER_OBJECT driver)
{
DbgPrint("驱动已卸载 \n");
} // By: LyShark
NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath)
{
// 初始化默认派遣函数
NTSTATUS status = STATUS_SUCCESS;
Driver->DriverUnload = UnDriver;
for (ULONG i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
{
Driver->MajorFunction[i] = DriverDefaultHandle;
} // 设置断点
DbgBreakPoint();
// KdBreakPoint();
// __debugbreak(); DbgPrint("驱动已加载 \n");
Driver->DriverUnload = UnDriver;
return STATUS_SUCCESS;
}

Windows系统加载完成以后,拖入我们的驱动文件WinDDK.sys,并通过驱动加载工具加载运行,此时Windows系统会卡死,回到WinDBG中发现已经可以进行调试了。

驱动开发:WinDBG 配置内核双机调试的更多相关文章

  1. VS2013+WDK8.1 驱动开发环境配置

    Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具 ...

  2. VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)

    ------------VS 2013驱动开发 + Windbg + VM双机调试(亲测+详解)------------- WIN10已上线,随之而来的是VS2015:微软在 "WDK760 ...

  3. Windows内核开发-5-(2)-内核模式调试

    Windows内核开发-5-(2)-内核模式调试 普通用户模式的调试,采取的是给进程添加一个线程来挂起断点,作为一个调试器的线程在进程中使用.照这样来类推,对操作系统调试相当于添加一个进程来限制操作系 ...

  4. Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    https://blog.csdn.net/charlessimonyi/article/details/50904956 Win8.1+VS2013+WDK8.1+VirtualBox or VMw ...

  5. windbg预览版,windbg preview配置win7x64双机调试

    目录 一丶简介 二丶步骤 1.下载Windbg Preview (windbg预览版本) 2.配置虚拟机端口 3.虚拟机设置调试湍口 4.windbg preview开始调试. 一丶简介 Windbg ...

  6. 驱动开发:配置Visual Studio驱动开发环境

    在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.ex ...

  7. 驱动开发:Win10内核枚举SSDT表基址

    三年前面朝黄土背朝天的我,写了一篇如何在Windows 7系统下枚举内核SSDT表的文章<驱动开发:内核读取SSDT表基址>三年过去了我还是个单身狗,开个玩笑,微软的Windows 10系 ...

  8. [驱动开发] windbg符号表

    新建"环境变量 - 系统":_NT_SYMBOL_PATH 值为:SRV*FullDirPath*http://msdl.microsoft.com/download/symbol ...

  9. 驱动开发:内核枚举ShadowSSDT基址

    在笔者上一篇文章<驱动开发:Win10枚举完整SSDT地址表>实现了针对SSDT表的枚举功能,本章继续实现对SSSDT表的枚举,ShadowSSDT中文名影子系统服务描述表,SSSDT其主 ...

  10. 2013-6-2 [转载自CSDN]如何入门Windows系统下驱动开发

    [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概 ...

随机推荐

  1. 国内加速访问Github的办法

    说明 自从GitHub私有库免费后,又涌入了一大批开发爱好者. 但国内访问GitHub的速度实在是慢得一匹,在clone仓库时甚至只有10k以下的速度,大大影响了程序员的交友效率. 国内加速访问Git ...

  2. 网传的Spring大漏洞

    昨天凌晨发了篇关于Spring大漏洞的推文,白天就有不少小伙伴问文章怎么删了. 主要是因为收到朋友提醒说可能发这个会违规(原因可参考:阿里云因发现Log4j2核弹级漏洞但未及时上报,被工信部处罚),所 ...

  3. 2021暑假训练赛1 基于Codeforce#479(div3)

    A - Xor Sum 似乎是很明显的字典树问题(不会啊,最后搬了一个板子修修改改以后才过了 AcWing 相似题目:143. 最大异或对 最后得吐槽一下 memset 为什么能这么慢啊 Kora! ...

  4. 又一创新!阿里云 Serverless 调度论文被云计算顶会 ACM SoCC 收录

    近日,阿里云函数计算产品团队撰写的关于 Serverless 调度的创新性论文,被云计算领域 ACM SoCC 国际会议长文录用. 去年阿里云函数计算团队首个提出在 FaaS 场景下的去中心化快速镜像 ...

  5. 1 分钟在 Serverless 上部署现代化 Deno Web 应用

    作者 | 连喆人(掌上乾坤公司) 本文选自 "Serverless 函数计算征集令" 征文 利用 Serverless 的水平扩展与按量付费优势, 结合自定义运行时, 实现 Web ...

  6. Go 语言中 defer 使用时有哪些陷阱?

    大家好,我是 frank ,「 Golang 语言开发栈」公众号作者. 01 介绍 defer 的使用方式是在其后紧跟一个函数调用或方法调用,确保在其所在的函数体返回之前执行其调用的函数或方法. 在 ...

  7. 【C++】类大小

    [来源]C++类大小详尽讲解 [来源]空类(empty class)

  8. 一种基于Unix Domain和TCP连接的跨设备多进程间通信的方法

    ​ 前言: 在linux系统进程间通信的方式有消息,消息队列,管道,内存映射,套接字等多种方式. 在Android系统上进行进程间通信主要是使用Binder,其它的还有共享内存,管道,RPC和Unix ...

  9. 使用 golang 开发 PHP 扩展

    使用 golang 开发 PHP 扩展 环境 golang go1.19.9 darwin/arm64 Macos/Linux PHP8.1.11 编译安装 实战 PHP脚手架生成 进入PHP源码,使 ...

  10. MYSQL varchar和nvarchar一些学习

    MYSQL varchar和nvarchar一些学习 背景 先试用 utfmb3的格式进行一下简单验证 注意脚本都是一样的. create database zhaobsh ; use zhaobsh ...