首页
论坛
课程
招聘
雪    币: 5382
活跃值: 活跃值 (1912)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝

[原创]VS2019驱动开发以及Windbg+Vmware15双机调试环境配置

2019-8-21 18:35 19548

[原创]VS2019驱动开发以及Windbg+Vmware15双机调试环境配置

2019-8-21 18:35
19548

刚刚开始学Windows驱动开发,被环境配置折磨了一整天,网上的好多教程不是太旧就是含糊不清,对我等新手实在是太不友好了,在这里稍微记录一下我的搭建过程,都是踩过坑的,不保证是最高效的,但绝对是能用的,希望能有所帮助。

0x01 实验环境

主机: windows10 专业版
虚拟机: Vmware 15 pro + windows 7 x86 sp1
windbg: 10.0.18362

0x02 VS2019驱动开发

VS2019+SDK

下载地址:VS2019社区版

 

在安装VS2019时,工作负载选项卡选择使用c++的桌面开发(勾选Windows 10 SDK 10.0.18362.0)通用windows平台开发

 

图片描述

 

其次还要勾选单个组件 - > MSVC v142 - VS 2019 C + x64 / x86 Spectre 缓解库(v14.22)才能成功编译项目。

WDK

下载地址:WDK

 

一直按照默认设置安装就好了,会给VS2019安一个拓展。

编译选项

编译程序之前还需要设置项目属性:

  • 右键-属性-C/C++

    • 将 警告等级 设置为 等级3(/W3)

    • 将 警告视为错误 改为 否(/WX-)

    • 代码生成 -安全检查 改为 禁用安全检查(/GS-)

  • 右键-属性-链接器

    • 将连接器警告视为错误 改为 否(/WX:NO)
  • 右键-属性-Driver Settings

    • 将 Target OS Version 改为 Windows 7

    • 将 Target Platform 改为 Desktop

开始编译

在VS中新创建一个KMDF项目,项目属性按照上面说的设置,创建一个源文件first.c,实例代码如下:

#include <ntddk.h>

// 提供一个Unload函数只是为了让程序能够动态卸载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{
    // 但是实际上我们什么都不做,只打印一句话:
    DbgPrint("first: Our driver is unloading…\r\n");
}

// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
    _asm int 3
#endif
    // 这是我们的内核模块的入口,可以在这里写入我们想写的东西。
    DbgPrint("first: Hello world!");

    // 设置一个卸载函数便于这个函数能退出。
    driver->DriverUnload = DriverUnload;

    return STATUS_SUCCESS;
}

然后快捷键ctrl B就可以成功生成.sys文件了。

 

图片描述

Windbg+Vmware15双机调试

Vmware15及虚拟机配置

下载地址:vmware win7

 

常规的布置好虚拟机之后,打开虚拟机设置进行如下操作:

  • 移除打印机,空出串口1供我们使用(其实是不是串口1无所谓,为了统一就这样弄吧)
  • 添加一个串行端口,具体配置如下如:

    图片描述

  • 在虚拟机内部,创建一个新的启动项,让win7以调试模式启动(不知道为什么用网上的纯命令行操作中间有两步会有参数错误,所以这里主要用图形界面来实现,亲测可用):

    • 以管理员身份启动cmd,输入

      bcdedit /copy {current} /d DebugEnty
      

      DebugEntry为选项的名字,可以自己定义

    • 之后打开msconfig,选择引导选项卡,找到我们刚刚创建的DebugEntry并点击高级选项,进行如下配置:

    图片描述

  • 现在重启之后就可以选择调试模式启动windows了。

Windbg

下载地址:Windbg

 

安装之后在桌面创建一个快捷方式,设置为以管理员身份启动,然后右键-属性,在目标一栏的后面添加:

 -b -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect -y

开始调试

先启动Windbg,然后再以调试模式启动虚拟机,Windbg出现如下界面就说明成功了

 

图片描述

主要参考

《Windows内核安全与驱动开发》

ps

博客有我的联系方式,欢迎大家来玩,地址:https://www.0x2l.cn



2020,给你一个诚意满满的夏令营!

最后于 2天前 被0x2l编辑 ,原因: 修改
最新回复 (25)
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Sam. 活跃值 2019-8-27 08:45
2
0
感谢分享!
最后于 2019-10-9 07:12 被Sam.编辑 ,原因:
雪    币: 1476
活跃值: 活跃值 (33)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
MR.ROBOT 活跃值 2019-8-27 08:50
3
0
是否考虑添加友链?

https://fanfanblog.cn
雪    币: 244
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aniston 活跃值 2020-1-9 21:11
4
0
nice
雪    币: 3470
活跃值: 活跃值 (73)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
Adventure 活跃值 2020-1-9 21:39
5
0
用pipe调试太卡了,还是换VirtualKD吧
雪    币: 8
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Railgun_ 活跃值 2020-3-22 08:54
6
0
如果出现error MSB8040: Spectre-mitigated libraries are required for this project.可以通过解决方案-属性-C/C++-代码生成-Spectre缓解 禁用 解决
雪    币: 1588
活跃值: 活跃值 (52)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
AlchemistS 活跃值 2020-3-31 20:06
7
0
求Linux下 VMware两个windows如何调试啊? 
雪    币: 136
活跃值: 活跃值 (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamatig 活跃值 2020-5-14 21:19
8
0
不对啊,提示:
严重性        代码        说明        项目        文件        行        禁止显示状态
错误        MSB8040        此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。了解详细信息: https://aka.ms/Ofhn4c        KMDF Driver2        D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets        436        
雪    币: 596
活跃值: 活跃值 (79)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
wjllz 活跃值 3 2020-6-6 06:28
9
0
AlchemistS 求Linux下 VMware两个windows如何调试啊? [em_35]
rootkits.xyz 去这个网站看看?
雪    币: 1923
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
只想睡个好觉 活跃值 2020-6-9 09:06
10
0
AlchemistS 求Linux下 VMware两个windows如何调试啊? [em_35]
用网络连
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-9 23:13
11
0
有木有大佬 能指导一下 vs2015 怎么 双机调试 ? qq = 344197289
雪    币: 352
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
EvilTobe 活跃值 2020-6-10 00:02
12
0
不考虑上个VirtualKD?
雪    币: 189
活跃值: 活跃值 (166)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
萌克力 活跃值 2020-6-10 02:30
13
0
2019有个很不友好的bug:msvc142的文件要复制到msvc141里面去
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-10 09:25
14
0

1

最后于 2020-6-10 09:45 被wx_たちばな Ukyou编辑 ,原因:
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-10 09:44
15
0
#if DBG
       _asm int 3
#endif
这句话是啥意思,谁能解释一下?
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-10 09:50
16
0
后缀名.cpp 不行  上面那句话删了就能通过
雪    币: 5382
活跃值: 活跃值 (1912)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
0x2l 活跃值 2 2020-6-10 11:19
17
0
EvilTobe 不考虑上个VirtualKD?
这篇是去年的了,现在我也用VirtualKD了,pipe实在是太慢了
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-10 12:09
18
0
0x2l 这篇是去年的了,现在我也用VirtualKD了,pipe实在是太慢了
大佬能帮我看看嘛?
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_たちばな Ukyou 活跃值 2020-6-10 12:25
19
0
VirtualKD 是什么意思啊?这个方法又不行了吗?我的天
雪    币: 5382
活跃值: 活跃值 (1912)
能力值: (RANK:220 )
在线值:
发帖
回帖
粉丝
0x2l 活跃值 2 2020-6-10 12:47
20
0
wx_たちばな Ukyou VirtualKD 是什么意思啊?这个方法又不行了吗?我的天
这个可以的,只要按步骤来肯定是能调试的。VirtualKD是另外的工具了,用不用都可以
雪    币: 1588
活跃值: 活跃值 (52)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
AlchemistS 活跃值 2020-6-30 14:35
21
0
只想睡个好觉 用网络连
谢谢
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qimwvxnv 活跃值 2020-7-9 19:10
22
0
iamatig 不对啊,提示: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB8040 此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在 ...
老弟解决没 我也和你一模一样的提示
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qimwvxnv 活跃值 2020-7-9 19:14
23
0
iamatig 不对啊,提示: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 MSB8040 此项目需要缓解了 Spectre 漏洞的库。从 Visual Studio 安装程序(单个组件选项卡)为正在 ...
老弟解决没 我也和你一模一样的提示
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qimwvxnv 活跃值 2020-7-9 19:51
24
0
楼主 我发现我vs2019里 没有MSVC v142 - VS 2019 C + x64 / x86 Spectre 缓解库(v14.22)这个单个选项
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_qimwvxnv 活跃值 2020-7-9 21:39
25
0
Railgun_ 如果出现error MSB8040: Spectre-mitigated libraries are required for this project.可以通过解决方案-属性-C/C++-代码生成- ...
没提示了 但是用启动加载器老是启动失败咋回事
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_麻蜥 活跃值 2020-7-20 08:30
26
0
你这个是windbg调试,不是用vs调试。可能机制是一样的,但是现在电脑性能都够用,还是vs调试更舒服方便。《windows内核编程》介绍了两种驱动调试,其中一种是你这种调试方法,我试过好用,但是另一种是vs通过网络配置调试虚拟机中的系统,这个我没有调试成功,卡在bcdedit /dbgsettings net 命令这里 ,这个命令win7 64不支持,微软官方说这命令支持最低版本是win8.1,不太明白。网址:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection?redirectedfrom=MSDN
游客
登录 | 注册 方可回帖
返回