Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备
系统基础环境
开发环境
win7下开发驱动需要安装vs,这里使用2017。
安装vs后需要安装对应版本的wdk,vs版本可在控制面板-程序和功能中看到。
之后,选择KMDF即可开始驱动编写。
如果出现error MSB8040: Spectre-mitigated libraries are required for this project.可以通过解决方案-属性-C/C++-代码生成-Spectre缓解 禁用 解决
参考代码:
#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;
}
注意:x64编译不能使用__asm,需要
#if DEBUG
DbgBreakPoint();
#endif
调试环境
调试环境需要VMware和windbg,安装好vmware后需要安装win7x64系统,相关工具已附到参考资料中。
安装后,设置调试端口即可。
先移除打印机
要注意一件事,想要打印dbgprint,还要设置虚拟机的注册表
reg文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter]
"DEFAULT"=dword:0000000f
重启后即可生效
windbg安装之后在桌面创建一个快捷方式,设置为以管理员身份启动,然后右键-属性,在目标一栏的后面添加:
-b -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect -y
调试时先打开windbg,再开虚拟机。
其他内容
vmware设置共享文件夹
windbg设置符号表
笔者用多种方法反复尝试,总是无法配置成功符号表,最终在某大佬的指点下才知道是自己的windbg版本有问题,换版本后即可正常下载符号表。(相关文件已附到参考资料中)
值得一提的是,现在微软官网已无离线符号表下载,但目前还可以用在线下载的符号表。
笔者的符号表路径:srv*E:\mypdb* http://msdl.microsoft.com/download/symbols
相关指令:
.reload 重载符号表
.sympath srv*E:\mypdb* http://msdl.microsoft.com/download/symbols 设置符号表路径
!sym noisy 开启相关提示
!process 0 0 查看活动进程信息
Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备的更多相关文章
- Windows7下驱动开发与调试体系构建——0.概述
本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...
- Windows7下驱动开发与调试体系构建——3.调试体系概述
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 调试体系概述 0.什么是自建调试体系? 就是复写windows的调试api,使得调试 ...
- Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...
- Windows7下驱动开发与调试体系构建——5.实战反调试标记位(NtGlobalFlag)
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html <加密与解密>P670中,介绍了检查程序是否被调试的第二种方法:查看进程 ...
- Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)
目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html asm文件设置 在vs x64中无法使用_asm关键字,需要使用.asm文件. 按第 ...
- windows7下手工搭建Apache2.2 php5.3 Mysql5.5开发环境
Apache2.2(apache_2.2.2-win32-x86-no_ssl)php5.3.5(php-5.3.5-Win32-VC6-x86,请注意选择VC6版本,否则无法加载php5apache ...
- VS2015配置Linux开发远程调试
# VS2015配置Linux开发远程调试 ### 简介-----------------------------vs2015支持跨平台开发 ### 软件环境--------------------- ...
- vue.js拓展篇(8):测试开发与调试
内容 第15章:测试开发与调试 任何实际项目的开发,除了功能性代码的完成,规范的开发流程和严谨的测试都是不可或缺的.合理使用工具将事半功倍. 1.ESLint ESLint是Lint语法检查工具,避免 ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
随机推荐
- Linux 01 概述
参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 简介 Linux ...
- git使用的一些坑和新得(一)
这是一个坑 你要知道作为一个新手对git的使用还处于摸索状态 今天就将这样的坑分享给大家 昨天,接到任务将代码发到远程仓库里.于是,我就天真的按步骤提交了! 然后就: To https: ! [rej ...
- java-分支重载以及构造方法
1:方法的签名: 方法名+参数列表就是一个方法的签名 2.方法的重载(Overload): 1)发生在同一个类中,方法名称相同,参数列表不同 2)编译器在编译时会根据方法的签名自动绑定方法 3.构造方 ...
- 图解OSI七层模型
七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系.它是一个七层的.抽象的模型体 ...
- Excel 数学函数(二):ISODD 和 ISEVEN
ISODD 函数用于判断一个数是否为奇数:ISEVEN 函数用于判断一个数是否为偶数. 结合文本函数 MID 和逻辑函数 IF,来判断一个身份证的性别. 身份证倒数第二位是奇数就代表男性,否则代表女性 ...
- 【Java】学习路径56-TCP协议 发送、接收
与UDP不同的是,TCP协议使用的是Socket,而不是DatagramSocket,这是要作区分的. 构造Socket对象的时候,可以直接指定ip地址与端口号.此时需要抛出异常. import ja ...
- BI如何配置“花生壳”,看这一篇就够了
花生壳作为一款免费的内网穿透软件,在软件行业备受青睐.在做好产品的同时,如何让客户轻松看到,也是非常有必要的.本篇将带领大家使用"花生壳"软件完成BI数据分析的配置.第一步:下载安 ...
- Knative部署应用以及应用的更新、应用的分流(二)
1. 应用的更新 1.1 更新hello-example应用 1.更新应用的环境变量 可通过命令行的方式亦可以通过读取配置文件的方式,这里主要来看命令行的方式 [root@kn-server-mast ...
- Python实践项目——LSB隐写术
此为北京理工大学某专业某学期某课程的某次作业 一.项目背景 1.隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容. 2.L ...
- 《Java基础——break与continue用法详解》
Java基础--break与continue用法详解 1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...