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 ...
随机推荐
- OWASP TOP 10 详解
OWASP--开放式web应用程序安全项目 参考文献:袁鸣凯.OWASP Top 10十大风险 – 10个最重大的Web应用风险与攻防.2016-9-18. https://blog.csdn.n ...
- 关闭ubuntu防火墙
1.关闭ubuntu的防火墙 ufw disable 开启防火墙 ufw enable 2.卸载了iptables apt-get remove iptables 3.关闭ubuntu中的防火墙的其余 ...
- C# 基础 - Json 之间的转换
这里举例两种方式. 1. Newtonsoft.Json.JsonConvert 需要引用外部的 Newtonsoft.Json.dll /// <summary> /// 将json字符 ...
- P1725 琪露诺 题解(单调队列)
题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. ...
- JVM之基础概念(运行时数据区域、TLAB、逃逸分析、分层编译)
运行时数据区域 JDK8 之前的内存布局 JDK8 之后的 JVM 内存布局 JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永 ...
- django 自带的用户系统
首先,我要说明一下,下面内容不是必须品,如果各位大神喜欢手写也是可以的,你也可以选择自带的功能来缩减你的代码量,提高效率! 第一步 系统配置用户表 首先,在models中创建用户表,导包 from d ...
- 美图录爬虫(requests模块,re模块)
Python 爬虫 最近学正则表达式,刚好知道这个网站美图录,就做了个爬虫拿来练练手,说一说遇到的问题 一 404问题 问题: 由于图片显示页面是分页的,每一页展示5张图片,为了方便没有每次去获取下一 ...
- 最短路径(Dijskra算法)
声明:图片及内容基于:https://www.bilibili.com/video/BV16C4y1H7Zc?from=articleDetail 最短路径 Dijkstra算法 原理 数据结构 核心 ...
- $(( )) 与 $( ) 还有${ } 差在哪?-- Shell十三问<第八问>
$(( )) 与 \(( ) 还有\){ } 差在哪?-- Shell十三问<第八问> 我们上一章介绍了 ( ) 与 { } 的不同,这次让我们扩展一下,看看更多的变化:$( ) 与 \( ...
- day-04-列表
列表的初识 容器型数据类型,可以承载大量的数据,有序的数据 why:int bool str:'123 True 太白' str: 存储少量的数据. str:切片还是对其进行任何操作,获取的内容全都是 ...