驱动开发环境及其双机调试环境搭建

开发环境搭建

使用工具: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.环境搭建的更多相关文章

  1. Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)

    驱动安装,通讯,Hello World 开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回. ...

  2. Win64 驱动内核编程-3.内核里使用内存

    内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...

  3. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

  4. Win64 驱动内核编程-7.内核里操作进程

    在内核里操作进程 在内核里操作进程,相信是很多对 WINDOWS 内核编程感兴趣的朋友第一个学习的知识点.但在这里,我要让大家失望了,在内核里操作进程没什么特别的,就标准方法而言,还是调用那几个和进程 ...

  5. Win64 驱动内核编程-18.SSDT

    SSDT 学习资料:http://blog.csdn.net/zfdyq0/article/details/26515019 学习资料:WIN64内核编程基础 胡文亮 SSDT(系统服务描述表),刚开 ...

  6. Win64 驱动内核编程-11.回调监控进线程句柄操作

    无HOOK监控进线程句柄操作 在 NT5 平台下,要监控进线程句柄的操作. 通常要挂钩三个API:NtOpenProcess.NtOpenThread.NtDuplicateObject.但是在 VI ...

  7. Win64 驱动内核编程-10.突破WIN7的PatchGuard

    突破WIN7的PatchGuard WIN64 有两个内核保护机制,KPP 和 DSE.KPP 阻止我们 PATCH 内核,DSE 拦截我们加载驱动.当然 KPP 和 DSE 并不是不可战胜的,WIN ...

  8. Win64 驱动内核编程-25.X64枚举和隐藏内核模块

    X64枚举和隐藏内核模块 在 WIN64 上枚举内核模块的人方法:使用 ZwQuerySystemInformation 的第 11 号功能和枚举 KLDR_DATA_TABLE_ENTRY 中的 I ...

  9. Win64 驱动内核编程-23.Ring0 InLineHook 和UnHook

    Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3 ...

随机推荐

  1. 25个关键技术点,带你熟悉Python

    摘要:本文收纳了Python学习者经常使用的库和包,并介绍了Python使用中热门的问题. 01.Python 简介 什么是 Python 一种面向对象的高级动态可解释型脚本语言. Python 解释 ...

  2. 后台开发:核心技术与应用实践 -- C++

    本书介绍的"后台开发"指的是"服务端的网络程序开发",从功能上可以具体描述为:服务器收到客户端发来的请求数据,解析请求数据后处理,最后返回结果. C++编程常用 ...

  3. Azure Front Door(一)为基于.net core 开发的Azure App Service 提供流量转发

    一,引言 之前我们讲解到使用 Azure Traffic Manager.Azure LoadBalancer.Azure Application Gateway,作为项目的负载均衡器来分发流量,转发 ...

  4. 从一个想法看 FreeBSD 是商业化还是学院派

    在某知名计算机网络论坛上我看到一个帖子,说自己想根据 FreeBSD 做一个移动的终端操作系统,就像安卓,苹果的 IOS 一样的. 逆向思维当初开发安卓的时候不可能没有考虑过 FreeBSD,因为无论 ...

  5. 痞子衡嵌入式:盘点国内MCU级RISC-V内核IP厂商

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内MCU级RISC-V内核IP厂商. 自RISC-V指令集2010年诞生以来,业界普遍认为,RISC-V将会改变现有的由Arm和Int ...

  6. Tomcat详解系列(1) - 如何设计一个简单的web容器

    Tomcat - 如何设计一个简单的web容器 在学习Tomcat前,很多人先入为主的对它的认知是巨复杂的:所以第一步,在学习它之前,要打破这种观念,我们通过学习如何设计一个最基本的web容器来看它需 ...

  7. Jmeter(三十八) - 从入门到精通进阶篇 - 命令行运行JMeter详解(详解教程)

    1.简介 前边一篇文章介绍了如何生成测试报告,细心地小伙伴或者同学们可以看到宏哥启动Jmeter生成测试报告不是在gui页面操作的,而是在gui页面设置好保存以后,用命令行来生成测试报告的.这一篇宏哥 ...

  8. c++ 反汇编 数组和指针

    字符串初始化字符数组 58: char as[] = "hello word"; 00AC7308 A1 70 2E B6 00 mov eax,dword ptr [string ...

  9. RabbitMQ 入门 (Go) - 5. 使用 Fanout Exchange 做服务发现(下)

    到目前为止,我一直专注于如何让消息进出消息代理,也就是RabbitMQ. 实际上,我们可以继续使用 RabbitMQ 和它的 Exchanges 来连接这个应用程序的其他部分,但是我想探索一个稍微不同 ...

  10. 云原生 API 网关,gRPC-Gateway V2 初探

    gRPC-Gateway 简介 我们都知道 gRPC 并不是万能的工具. 在某些情况下,我们仍然想提供传统的 HTTP/JSON API.原因可能从保持向后兼容性到支持编程语言或 gRPC 无法很好地 ...