Win64 驱动内核编程-1.环境搭建
驱动开发环境及其双机调试环境搭建
开发环境搭建
使用工具:vs2015,Windows 10 SDK_10.0.14393,WDK10.0.14393.0
(1)安装VS2015 随便一个版本吧,我安装的企业版
(2)安装WDK10.0.14393 安装WDK
(3)安装Windows 10 SDK_10.0.14393.安装SDK,这个首先可以尝试从VS配置更新里安装。
控制面板->卸载程序->vs2015->更改
选上这个SDK,然后更新。注意这个地方很有可能更新失败,我在公司一次就更新成功,在家里更新了好多次,最后都是hash校验失败啥的错误。最终无奈,去网上找离线安装包,注意离线安装包是一个几百兆的压缩文件,不是那种很小的。很小的下载下来,双击之后还是走的上面的那个流程。相当于下载器。下载器下载下来的依然可能出现之前的hash校验失败。这个地方我尝试了好多次。
TIP:最后一点就是一定要注意,SDK和WDK的第三位版本号一定要对上。我的是14393。
搭建双击调试环境
接下来是搭建调试环境,驱动通常是搭建双击调试环境。虽然不是要逆向调试啥的。但是本机调试的话很容易丢失一些信息。毕竟蓝屏后我们能得到的只有一个dump。
双击调试环境搭建很简单。下面说下步骤:
1.安装VMWARE,虚拟机。
2.安装Win 64系统。(我是安装的win7)。
3.把第二部安装的系统UAC关掉。
4.在虚拟机里安装WMware Tools。这个在虚拟机设置里可以直接更新。
5.在虚拟机里直接安装.net framework4(如果安装的系统高于win7就不用了,win7,貌似是3.5的,之后都是大于等于4.0的)。
6.备份虚拟机当前镜像。
上面安装完虚拟机之后,接下来继续搭建调试环境。
1.安装windebug.
2.下载VirtualKD然后把target文件夹拷贝到虚拟机里。
3.虚拟机里管理员权限,找到刚刚下载的VirtualKD,运行target文件夹下的vminstall.exe。
4.然后在本机里运行VirtualKD里面的wmmon64.exe,设置调试路径[Debugger path]为1安装的windebug路径
5.重启刚刚的虚拟机(注意此时本机的wmon64正在开启着,在第3步里)。选择这个启动项:
然后会发现windebug自动启动了,其实是被wmon唤醒的,然后电脑卡在这个界面:
可以理解为现在是卡到了调试断点,在windebug里面直接按F5让虚拟机里的系统跑起来。
6.然后先别调试,先去下载windows符号表:
http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx对应找到自己系统的符号表。注意有SP1和RTM的区别。下载之后安装到C:\symbols这个目录。
7.在windebug里设置符号表路径:
File->Sysbol file path
8.测试符号表是不是导入成功,此时先重启刚刚的虚拟机,进入到那个按f5之前的那一步。
输入u KiInsertQueueApc看到下面这样(u xxx是内存代码反汇编):
就没啥毛病了。
OK上面的开发环境和调试环境就OK了。
Win64 驱动内核编程-1.环境搭建的更多相关文章
- Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)
驱动安装,通讯,Hello World 开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回. ...
- Win64 驱动内核编程-3.内核里使用内存
内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...
- Win64 驱动内核编程-8.内核里的其他常用
内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...
- Win64 驱动内核编程-7.内核里操作进程
在内核里操作进程 在内核里操作进程,相信是很多对 WINDOWS 内核编程感兴趣的朋友第一个学习的知识点.但在这里,我要让大家失望了,在内核里操作进程没什么特别的,就标准方法而言,还是调用那几个和进程 ...
- Win64 驱动内核编程-18.SSDT
SSDT 学习资料:http://blog.csdn.net/zfdyq0/article/details/26515019 学习资料:WIN64内核编程基础 胡文亮 SSDT(系统服务描述表),刚开 ...
- Win64 驱动内核编程-11.回调监控进线程句柄操作
无HOOK监控进线程句柄操作 在 NT5 平台下,要监控进线程句柄的操作. 通常要挂钩三个API:NtOpenProcess.NtOpenThread.NtDuplicateObject.但是在 VI ...
- Win64 驱动内核编程-10.突破WIN7的PatchGuard
突破WIN7的PatchGuard WIN64 有两个内核保护机制,KPP 和 DSE.KPP 阻止我们 PATCH 内核,DSE 拦截我们加载驱动.当然 KPP 和 DSE 并不是不可战胜的,WIN ...
- Win64 驱动内核编程-25.X64枚举和隐藏内核模块
X64枚举和隐藏内核模块 在 WIN64 上枚举内核模块的人方法:使用 ZwQuerySystemInformation 的第 11 号功能和枚举 KLDR_DATA_TABLE_ENTRY 中的 I ...
- Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook
Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3 ...
随机推荐
- python3 中post处理json 数据
使用详情如下 import json import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT ...
- Mongo的相关语法
mongod的条件操作符 $gt -------- greater than > $gte --------- gt equal >= $lt -------- less than < ...
- 进阶宝典一|SqlServer数据库自动备份设置
很多人都没机会接触到数据库备份,经常操作的要么是数据库管理员,要么是项目负责人.那是不是说数据库备份就不用学了? 不,其实作为开发人员应该要了解数据备份,数据备份的手段有很多:软件备份.脚本备份.其他 ...
- 2019 GDUT Rating Contest I : Problem G. Back and Forth
题面: G. Back and Forth Input file: standard input Output file: standard output Time limit: 1 second Mem ...
- MongoDB4.2 分片扫盲说明
说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明分片相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 分片的原理.搭建.应用.分片(sharding)是指将数 ...
- PTA 两个有序链表序列的合并
6-5 两个有序链表序列的合并 (15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L ...
- C# 输出一个字符串的前缀、后缀和它的子串(信息内容安全 实验一)
一.什么是前后缀 字符串的前缀:符号串左部的任意子串(或者说是字符串的任意首部) 字符串的后缀:符号串右部的任意子串(或者说是字符串的任意尾部) 举例:比如 101110 它的前缀就是空串.1.10. ...
- greenplum6.14、GPCC6.4安装详解
最近在做gp的升级和整改,所以把做的内容整理下,这篇文章主要是基于gp6.14的安装,主要分为gp,gpcc,pxf的一些安装和初始化.本文为博客园作者所写: 一寸HUI,个人博客地址:https:/ ...
- Kubernetes声明式API与编程范式
声明式API vs 命令时API 计算机系统是分层的,也就是下层做一些支持的工作,暴露接口给上层用.注意:语言的本质是一种接口. 计算机的最下层是CPU指令,其本质就是用"变量定义+顺序执行 ...
- java面试-什么是GC root
一.什么是垃圾 内存中已经不再被使用到的空间就是垃圾 二.要进行垃圾回收,如何判断一个对象是否可以被回收? 引用计数法 很难解决对象之间的循环引用问题 枚举根节点做可达性分析 通过一系列名为" ...