Windows驱动开发备注
接触Windows内核驱动开发有一段时间了,之前由于资料少老旧走了很多弯路,所以在这里备注哈梳理自己所学。
学习参考资料
1.Windows内核安全驱动开发
2.WIN64驱动编程基础教程
3.各个版本DDK/WDK和sysinternals源码合集
4.看雪论坛
5. Windows7驱动调试小Tips
常用工具
- 可能要使用到的注册表修改代码:
1
2
3
4
5
6
7
8//解决win7以上Kdprint、Dbgprint不能输出的问题
//需要重启
//和DbgPrintEx的两个参数相关,不同级别。推荐第二种和Android的Log差不多
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:00000008
或则使用这种方式:1
2
3
4//不需要重启
1. windbg连接好被调试的操作系统后,载入符号 (.reload)
2. 枚举符号x nt!kd_default*
3. 修改全局变量的值 ed nt!Kd_DEFAULT_Mask 8 ed nt!Kd_IHVDRIVER_Mask 0x8
工具使用
编译器
调试器
Windbg入门实战讲解
WinDbg的几个默认工作空间(窗口布局)
Windows调试工具入门 — 1、2
windbg常用命令
- 窗口布局
单纯的直接使用Windbg会发现界面很单一,不方便查看信息,这时候我们会使用View菜单下多选取几个窗口,但是会发现拖动起来很困难,特别是对于有强迫症的人简直不能忍受。其实Windbg已经给我们提供好了几个布局,这些文件在Windbg安装目录下themes文件夹下,还有个doc文档说明,我们可以直接使用File菜单下的Open Workplace in file打开,也可以寻找其他人的布局如上面的参考2,特别适合内核调试。这些布局配置都保存在HKCU\Software\Microsoft\Windbg项下。
具体命令用法学习参考1、3(参考3有后续几篇文章都不错,适合学习)
一些其他有用的东西
论ntoskrnl.exe中的导出函数、非导出函数、公开函数、非公开函数
ntoskrnl.exe导出函数用MmGetSystemRoutineAddress获取地址