问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Windows 内核开发环境搭建指南:从VS 2015到双机调试

创作时间:
作者:
@小白创作中心

Windows 内核开发环境搭建指南:从VS 2015到双机调试

引用
CSDN
1.
https://m.blog.csdn.net/now2sleep/article/details/145693082

本文详细介绍了在Windows环境下搭建内核开发环境的具体步骤,包括Windows 10和Windows 7的环境配置、VS 2015的安装、驱动模板的创建、Windbg的设置以及双机调试的实现。对于从事或学习Windows内核开发的技术人员具有较高的参考价值。

1. 本节目标

  • Windows 10 + VS 2015
  • 能够创建diver模板,并编译成功
  • Windows 7 32位 + VS 2008
  • 实现双机调试
    本节双机调试为Windows10 虚拟机使用Windbg调试Windows 7虚拟机

1.1. 所需资源下载

  • Windows镜像 + VS安装包
    建议Windows 7 sp3、vs 2015 update 3
  • WDK

2. Windows 10 调试机

Windows10只是习惯,也可用Windows 7,目的是搭建能够开发driver的环境

2.1. 安装VS 2015

注意WDK版本对应即可
安装VS 2015 所勾选项如下

  • Visual C++
  • SDK
    注意SDK版本号为14393。若没有14393,请检查网络。
    微软官方下载WDK,注意版本对应

    14393版本对应Windows 10 版本 1607
    如上图找到相应版本下载后运行,一路默认next finish安装成功。
    建议完成后重启电脑 Window 10

2.2. Driver模板

  1. 新建项目
    WDK版本安装对应后,出现Windows Driver选项栏,此处如图选择新建模板即可
  2. 创建DriverMain.c
    注意是
    .c
    而不是
    .cpp
    ,不然可能出现LNK2019错误
#include <ntifs.h>
VOID DriverUnload(PDRIVER_OBJECT pDriver)
{
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pReg)
{
    pDriver->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
}
  1. 更改设置
    此时直接编译生成,会因为存在“警告”而报错无法编译通过
    打开“调试 -> 属性”,更改release 和 debug的相关设置,如下图:
    最后直接重新生成即可
    如果能编译通过,但是代码片段依旧提示错误
    第一行红色的标记,是VS的bug,虽然显示命令行错误,但是能够编译生成成功,同时代码没有颜色标注了,全是黑色默认字体。如下图,可以看看最后一节

2.3.(可选)添加自定义代码段

本小节目的是便于生成常用代码片段,完成本小节后可键入dirver后加Tab键,自动生成所需初始代码

  1. 本地创建
    dirver.snippt
    文件
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>driver</Title>
            <Shortcut>driver</Shortcut>
            <Description>driver init</Description>
        </Header>
        <Snippet>
            <Code Language="cpp"><![CDATA[#include<ntifs.h>
            
            
            VOID DriverUnload(PDRIVER_OBJECT pDriver)
            {
            
            }
            
            NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pReg)
            {
            
                pDriver->DriverUnload = DriverUnload;
                return STATUS_SUCCESS;
            }]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>
  1. 导入
    快捷键Ctrl+k,Ctrl+b(按住Ctrl,依次按k和b)打开代码片段管理器或者通过“工具 -> 代码片段管理器”打开。如下图,选择Visual C++语言并点击导入上步骤创建的snippet文件即可。
    导入成功会在My code Snippet内显示。重启VS后,尝试键入driver并Tab补全代码如下图:
    Tab后自动生成上小节代码片段

2.4. windbg

编辑虚拟机设置,删除打印机,添加串口,命名如下,并将该端设置为服务器
下载安装VS后将自带windbg
找到windbg文件目录,右键发送到桌面快捷方式,并右键快捷方式打开属性
在属性窗口,将目标改为如下:

"C:\Program Files (x86)\Windows Kits\10\Debuggers\u0086\windbg.exe" -y SRV*C:\Users\Hello\Desktop\symbols*http://msdl.microsoft.com/download/symbols -b -k com:port=//./com_1,baud=115200,resets=0

双击运行windbg,等待Windows 7连接即可。

4. Windows 7 被调试机

选择32位,和windbg相对应

4.1. 设置引导

管理员模式打开命令行,依次输入:

bcdedit /copy {current} /d debug
# 已将该项成功复制到 {af6621e5-ed96-11ef-bc97-879316f77421}
bcdedit /displayorder {af6621e5-ed96-11ef-bc97-879316f77421} /addlast
bcdedit /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200
bcdedit /bootdebug {af6621e5-ed96-11ef-bc97-879316f77421} ON
bcdedit /debug {af6621e5-ed96-11ef-bc97-879316f77421} ON
bcdedit /timeout 30

命令行执行结果如下:
(因为复制错误,输出不好看,只能先用记事本修改后展示)
命令执行完毕后,Crtl+R键入msconfig打开系统配置,将显示新创建的debug项,如图:
最后点击虚拟机内桌面左下角Windows选择重启
若没添加串口,此时还是能够正常进入系统的。关机后,编辑虚拟机设置,添加串行端口,使用命名的管道
//./pipe/com_1
本帖采用双虚拟机调试,故需要将命名管道中改为“该端是客户端”,如图所示:
如果上图界面设备中存在打印机,应将打印机移除,否则会占用一个管道。
此时再次重启Windows7虚拟机,选择debug模式,将成功可以在黑屏处中断。

4.2. 双机调试

先启动windbg再启动Windows 7被调试器即可
最终效果如下

5. 杂项

5.1. VS 2015 相关

解决 vs 2015,cpp与c报错混乱的问题
本质上就是更新,使用最新版本
命令行错误:只有在编译C++驱动程序时才能使用异常处理选项——参考链接
因为这个又重新创建了一个Windows 10虚拟机,下载安装了VS 2015 update 3版本 : (
也算是成功解决,如下:
没有奇怪的报错,代码着色正常。

5.2. Windows 7 VM tools相关

解决vm tools 安装问题
本质上仍是更新

因为新建的cn_windows_7_home_basic_x86_dvd_x15-65975版本,没有sp1和sha1签名,导致无法之间安装vm tools,需要依次下载更新KB976932、KB4474419两个补丁

IE浏览器太过原始,无法直接访问上述网站。先在主机上下载了适用于windows xp的Chrome,并借助
python -m http.server 9000
传输到Windows 7上安装。也可借助虚拟机共享文件夹传输。

5.3. 参考

如果调试机为宿主机,则默认为“该端为服务端”,宿主机使用
"C:\Program Files (x86)\Windows Kits\10\Debuggers\u0086\windbg.exe" -y SRVC:\Users\Hello\Desktop\symbolshttp://msdl.microsoft.com/download/symbols -b -k com:port=//.pipe/com_1,baud=115200,pipe
即可成功连接
网上大多都是宿主机调试虚拟机,双虚拟机较少。该贴主要参考以下链接才得以成功实现双虚拟机调试。

  • 双机调试
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号