1. 下载和使用WDK

应用程序使用开发包SDK,类似的,内核编程使用"Windows Driver Kit",简称WDK。WDK已经自带所有需要的头文件、库、C/C++语言及汇编语言的编译器和链接器
如何获取WDK
参见
http://msdn.microsoft.com/zh-cn/windows/hardware/gg487463
安装注意:
  • 尽量安装到相对简单路径,避免特殊情况配置路径时麻烦以及可能出现的编译问题
  • 选择“完全安装”
2.编写第一个内核模块
=============================
#include <ntddk.h>

VOID DriverUnload(PDRIVER_OBJECT driver)
{
     DbgPrint("first: Our driver is unloading...\r\n");
}

NTSTATUS DriverEntry (PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
     _asm int 3
#endif

DbgPrint("first: Hello Windows kernel!!");
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}

==============================
以上是一个最简单的示例程序
DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。
3.编译该内核模块
在first.c相同工程目录下增加两个文件:makefile和sources
内容分别为:
makefile
==============================
#############################################################################
#
#       Copyright (C) Microsoft Corporation 1995
#       All Rights Reserved.
#                                                                          
#       MAKEFILE for WDM device driver kit
#
#############################################################################

#
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of the Windows NT DDK
#

!if "$(WIN2K_DDKBUILD)" == ""
!INCLUDE $(NTMAKEENV)\makefile.def
!endif

===============================

sources
===============================
# ############################################################
#
#Copyright (c) 2000  Microsoft Corporation
#
#Date:
#   19-Jul-2000
#
#Module Name:
#    sources.
#
#Abstract:
#    This file specifies the target component being built and the list of
#    sources files needed to build that component.  Also specifies optional
#    compiler switches and libraries that are unique for the component being
#    built.
#
#  This directory builds
#       WIA Sample Camera Driver
#
# ############################################################

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c

===============================
开始->程序->Windows Driver Kits-> WDK XXXX.XXXX ->Build Enviroments ->Windows XP ->Launch Windows XP x86 Checked Build Enviroment
编译即得到first.sys
4. Vmware创建一个新的虚拟机,并安装WindowsXP SP3系统
步骤在此不再详述,可搜索相关帖子
记得安装Vmware tools, 以方便虚拟机内外共享文件
5. 在虚拟机中下载并安装srvinstw
srvinstw即services installation for windows
搜索下载,参考
http://www.onlinedown.net/soft/36059.htm
a. 将刚刚编译生成的first.sys拖入虚拟机
b. 安装服务->本地计算机->输入不与已存在服务重名的服务名
c. 手动输入sys文件的路径
d. 选择“设备驱动”
e. 选择启动类型为手动
6. 运行与查看输出信息
至此内核模块已经可以运行了,可以通过net start first / net stop first来启动和停止该服务
内核模块的输出可以在WinDbg中查看;也可以直接用DbgView.exe来查看输出
去微软的网站上下载DebugView.exe,参考地址
http://technet.microsoft.com/zh-cn/sysinternals/bb896647(en-us).aspx
 
DebugView需要在Capture菜单中将Capture Kernel勾上
再次启动/停止服务,就可以在DbgView中看到输出了
7. 在调试机(宿主机)安装WinDbg
WinDbg下载地址参考:
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
8. 设置Windows XP调试执行
显示所有文件,不隐藏系统保护的文件后
在系统盘下打开并修改boot.ini文件
内容通常为:
============================
[boot loader]
timeout=0
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
============================
最后一行复制一下,并加上新的参数使之以调试方法启动
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200
9. 设置VMWare的管道虚拟串口
调试机应与被调试机以串口相连,若被调试机是虚拟机,可以在虚拟机上生成一个用管道虚拟的串口
打开虚拟机,不要启动->左边Commands栏->Edit virtual machine settings->Hardware->Add
在Add Hardware Wizard中,
类型选择"Serial Port"
选择"Output to named pipe"
接下来分别选择"\\.\pipe\com_1"和"This end is the server"以及"The other end is an application."
完成即可
10. WinDbg的启动参数
在调试机上加上如下参数启动WinDbg,使之连接一个管道,并把这个管道当作一个串口来处理
windbg.exe -b -k com:port=\\.=pipe\com_1,baud=115200,pipe
在控制台执行此命令或者在windbg.exe的快捷方式属性中“目标”中增加上述启动参数
先打开虚拟机,启动到调试模式下的Windows,然后启动WinDbg,显示已连接上的信息就表示成功了
刚连接上时虚拟机里的系统会被中断,这时要在WinDbg的命令提示符“kd>”后输入“g”并回车
11. 设置Windows的内核符号表
WindDbg把内核视为一个整体,只要告诉它代码的路径和符号表的路径就可以了
调试连接上之后,File->Symbol File Path, 输入符号表位置,指定编译结果所在的objchk_wxp_x86\i386即可
还需要指定Windows的内核符号表,在上文的符号表路径中增加一条路径,与之前的用分号隔开:
srv*c:\symbols*http://msdl.microsoft.com/download/symbols
可打开C:\symbols查看是否将符号表下下来;若没有,多Reload几次
12. 调试first
源码中
#if DBG
_asm int 3
#endif
int 3是一句汇编指令,执行到此程序会中断;若不是调试状态执行则会直接蓝屏
加上宏DBG测试以保证只有调试版本该语句才会被编译
在虚拟机中运行net start first, 则会看到弹出断点
此时可以打开Watch窗口观察和修改变量了
本文是根据谭文《Windows内核安全编程》一书,结合自己的实际应用进行整理所得

Windows内核开发调试环境配置详解相关推荐

  1. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  2. xp系统本地服务器环境配置,Windows XP安装Apache环境图文详解Windows服务器操作系统 -电脑资料...

    本文章来简单的介绍Windows XP安装Apache环境图文方法,有需要了解的朋友可参考参考, 双击 apache_2.2.8-win32-x86-no_ssl.msi 文件,开始安装 Apache ...

  3. c语言path环境变量,Windows下PATH等环境变量详解(转载)

    在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问题是:有的学习者能够按照提示 ...

  4. Linux安装消息队列IBM MQ 7.5开发版安装配置详解

    消息队列IBM MQ 7.5开发版安装配置详解 文章目录 消息队列IBM MQ 7.5开发版安装配置详解 前言 一.什么是IBM MQ? 二.安装前准备 1.安装前准备 2.安装MQ Server 3 ...

  5. java JDK安装与环境配置详解(超超超级详细)

    点击以下链接获取详细图文教程! java JDK安装与环境配置详解 https://v.xiumi.us/board/v5/3QTAV/112689421

  6. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    因为项目需求,需要开发PHP的项目,所以不得不花点时间开始学习PHP,过程非常要抓狂,还没有开始开发已经被一大堆复杂的环境搭建搞疯了 经过多方实验,决定将过程记录下来,也为了让很多跟我一样从零开始学习 ...

  7. Kinect开发笔记之三Kinect开发环境配置详解

            0.前言:        首先说一下我的开发环境,Visual Studio是2013的,系统是win8的64位版本,SDK是Kinect for windows SDK 1.8版本. ...

  8. Java零基础必看学习教程,Java开发环境配置详解

    很多Java新手小白在学习Java编程的时候,碰到的第一难题就是不知道如何安装和配置java开发环境. 今天整理了史上最详细的安装及Java开发环境配置教程,通过图文并茂的方式详细讲解每一步骤,手把手 ...

  9. MyEclipse/eclipse的php开发调试环境配置

    IDE为程序开发者提供高效的开发环境,方便快捷.省时省力.就本人初尝对PHP开发环境的配置,也是花掉了半天的时间,才搞明白.现在分享给跟我一样初次接触,但需要IDE开发环境的菜鸟留下一份参考资料,高手 ...

最新文章

  1. BZOJ4543/BZOJ3522 [POI2014]Hotel加强版(长链剖分)
  2. Android编码实现软件界面
  3. 文巾解题 679. 24 点游戏
  4. 账号管理工具_全新微信个人号管理工具能选择吗?为何这么说?
  5. 曲线组合图 类型详情
  6. CountDownLatch源码解读
  7. win10去掉快捷方式小箭头_快捷方式小箭头很烦人 一招教你取消
  8. DNS错误不能上网怎么办?电脑dns错误修复方法?
  9. 再见!杭州!再见!阿里巴巴
  10. GDUT——1169: Krito的讨伐(优先队列BFS)
  11. VUE 自定义子组件v-bind及v-on指令的大小写问题
  12. 晏殊几何学讲义(思维导图)
  13. Clojure Web开发–最新技术–第2部分
  14. 我的编程之路:从好玩到玩好
  15. 3-基于51单片机的篮球计分器
  16. 计算机辅助训练对吞咽障碍,吞咽障碍的六大家庭训练方法
  17. g6实现左右展开树图(思维导图)
  18. 微信小程序ocr身份证识别以及手机号获取
  19. 有种爱,不会提起不会忘记
  20. 盘点黑帽SEO常用的作弊技巧

热门文章

  1. GSMArena魅族mx四核评测全文|去除英文|
  2. java实现简单控制台出租房屋管理系统
  3. SwiftUI 界面大全之宠物领养管理App(教程含源码)
  4. 华硕主板装系统蓝屏_华硕主板装系统蓝屏咋设置bios?自己装Win7系统硬件官网驱动华硕主板H61M-E(英特尔芯片组)...
  5. 资金流向┃权证行情┃股票黑马┃股票IIQ┃股票分析┃股票市场分析/股票
  6. 大象转身 | 沃尔玛搅局社区团购
  7. 降本增效背后,“现代牧业”们要做好持久战准备
  8. python模拟比赛测试胜率
  9. 在地址栏上输入一个url,到这个页面呈现出来,中间会发生什么?
  10. kaggle Airbus Ship Detection Challenge 船舶检测