目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html


系统基础环境

开发环境

win7下开发驱动需要安装vs,这里使用2017。

安装vs后需要安装对应版本的wdk,vs版本可在控制面板-程序和功能中看到。

这里的版本为10.0.17763.1

之后,选择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系统,相关工具已附到参考资料中。

安装后,设置调试端口即可。

先移除打印机

vmware设置调试端口

系统设置

要注意一件事,想要打印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.驱动开发的环境准备的更多相关文章

  1. Windows7下驱动开发与调试体系构建——0.概述

    本文集内容为windows7x64下驱动开发与调试体系构建,内容目录如下: 1.驱动开发的环境准备 2.R3与R0的通信示例 3.自建调试体系概述 4.在x64下使用汇编代码 5.实战反调试标记位(N ...

  2. Windows7下驱动开发与调试体系构建——3.调试体系概述

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 调试体系概述 0.什么是自建调试体系? 就是复写windows的调试api,使得调试 ...

  3. Windows7下驱动开发与调试体系构建——2.R3与R0的通信示例

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html 在阅读本节前,建议先阅读<Windows内核安全与驱动开发>第五章内容, ...

  4. Windows7下驱动开发与调试体系构建——5.实战反调试标记位(NtGlobalFlag)

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html <加密与解密>P670中,介绍了检查程序是否被调试的第二种方法:查看进程 ...

  5. Windows7下驱动开发与调试体系构建——4.在x64下使用汇编代码(x86下的_asm)

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html asm文件设置 在vs x64中无法使用_asm关键字,需要使用.asm文件. 按第 ...

  6. 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 ...

  7. VS2015配置Linux开发远程调试

    # VS2015配置Linux开发远程调试 ### 简介-----------------------------vs2015支持跨平台开发 ### 软件环境--------------------- ...

  8. vue.js拓展篇(8):测试开发与调试

    内容 第15章:测试开发与调试 任何实际项目的开发,除了功能性代码的完成,规范的开发流程和严谨的测试都是不可或缺的.合理使用工具将事半功倍. 1.ESLint ESLint是Lint语法检查工具,避免 ...

  9. windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...

随机推荐

  1. python推导式与海象运算符

    背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...

  2. kubernetes之Endpoint引入外部资源实践;

    1. 什么是Endpoint? 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配 ...

  3. Java SE 16 新增特性

    Java SE 16 新增特性 作者:Grey 原文地址:Java SE 16 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...

  4. JavaScript基础回顾知识点记录2

    js 使用嵌套for循环输出三角形 for(var i=0; i<5; i++){ //正三角 // for(var j=0; j<i+1; j++){ // document.write ...

  5. 页面POST请求302重定向解决方案

    一.在后端Middleware中判断如果是post请求,返回json格式 二.前端全局js中捕获ajax请求进行处理

  6. KingbaseES 两表关联Update的两种写法与性能

    熟悉oracle 的人都知道,对于两表的关联更新,其执行计划主要有 Filter 和 Outer Join 两种方式.对于大批量数据的update,Join方式明显是更优的选择.KingbaseES ...

  7. KingbaseES XA 分布式事务

    在分布式系统中,各个节点(或者事务参与方)之间在物理上相互独立,各节点之间无法确切地知道其它节点中的事务执行情况,所以多节点之间很难保证ACID,尤其是原子性.如果是单节点的事务,由于存在事务机制,可 ...

  8. git reset总结

    git reset git 的重置操作 有三种模式:hard.mixed(默认).soft 1. hard 用法 hard会重置stage区和工作区,和移动代码库上HEAD 和branch的指针所指向 ...

  9. Kubernetes容器运行时弃用Docker转型Containerd

    文章转载自:https://i4t.com/5435.html Kubernetes社区在2020年7月份发布的版本中已经开始了dockershim的移除计划,在1.20版本中将内置的dockersh ...

  10. 使用KubeOperator扩展k8s集群的worker节点

    官方文档网址:https://kubeoperator.io/docs/installation/install/ 背景说明 原先是一个三节点的k8s集群,一个master,三个woker(maste ...