注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书科学技术计算机/网络软件与程序设计其他编程语言/工具Windows内核调试技术

Windows内核调试技术

Windows内核调试技术

定 价:¥79.00

作 者: 谭文
出版社: 电子工业出版社
丛编项:
标 签: 暂缺

购买这本书可以去


ISBN: 9787121500237 出版时间: 2025-04-01 包装: 平装-胶订
开本: 128开 页数: 字数:  

内容简介

  本书以为安全系统所开发的Windows驱动程序为例,由浅入深地介绍了Windows内核调试所需要的环境、工具、相关知识及技巧。书中列举了Windows内核编程开发者容易犯的各类错误,以及由此导致的不同缺陷的调试和解决方法。对远程调试、面向海量用户的内核驱动程序的质量控制、程序冲突、无文档编程等内核开发中常遇到的问题,也提供了对应的解决方案。本书适合具有C语言基础的计算机相关专业大中专院校学生、软件行业Windows相关的底层开发者、计算机安全行业的开发和研究人员阅读。

作者简介

  谭文,某著名互联网企业专家工程师,从事底层及安全相关开发工作二十余年。参与开发过DLP、防火墙、模拟器、反病毒软件、业务安全等多种著名产品。其编写的代码在日活上亿的用户机器上稳定运行,守护着用户与系统的安全。著有《天书夜读:从汇编语言到Windows内核编程》《寒江独钓:Windows内核安全编程》《Windows内核编程》多部相关技术专著。业余爱好剑道,为上海华剑馆弟子。

图书目录

第1章 内核开发与调试的准备 001
1.1 环境部署和工具安装 001
1.1.1 选择调试工具 001
1.1.2 安装Visual Studio和WDK 003
1.1.3 安装被调试的虚拟机 004
1.2 WinDbg的用法和存在的各种问题 007
1.2.1 做好快照并快速连接WinDbg 007
1.2.2 符号表和卡顿 008
1.2.3 源代码问题 010
1.3 内核调试的实际操作示例 011
1.3.1 WinDbg中有用的主要窗口 011
1.3.2 常用的调试命令 013
1.3.3 调用栈与当前进程 014
1.4 编写第一个例子 017
1.4.1 无法加载问题 017
1.4.2 不起作用的代码 020
1.4.3 正确的代码结构与异常处理 023
1.4.4 以覆盖为目的的调试 025
第2章 常见错误和非法地址访问蓝屏 028
2.1 非法指针导致的蓝屏 028
2.1.1 空指针访问导致的蓝屏 028
2.1.2 空指针写入导致的蓝屏 030
2.1.3 简单乱指针导致的蓝屏 032
2.1.4 乱指针遍历链表导致的蓝屏 033
2.1.5 出现乱指针的原因 035
2.2 越界导致的蓝屏 037
2.2.1 分配边界页面的函数 037
2.2.2 字符串越界导致的蓝屏 038
2.2.3 内存扫描越界导致的蓝屏 041
2.2.4 栈越界导致的蓝屏 043
2.3 非法地址执行导致的蓝屏 045
2.3.1 执行空函数指针导致的蓝屏 045
2.3.2 执行栈地址函数指针导致的蓝屏 046
2.3.3 执行已卸载驱动函数导致的蓝屏 047
2.4 各类非法访问错误总结 050
第3章 内核开发中的泄漏、卡死与重入 052
3.1 内存泄漏 052
3.1.1 通过任务管理器观察内存泄漏 052
3.1.2 通过PoolTag来排查泄漏 056
3.1.3 分三级管理的内存分配 058
3.1.4 快速定位内存泄漏 064
3.2 卡死 067
3.2.1 死循环导致的进程强卡死 068
3.2.2 死循环导致的系统卡死 071
3.2.3 自旋锁未释放导致的系统卡死和蓝屏 075
3.3 重入 080
3.3.1 递归导致的双重失败崩溃 081
3.3.2 回调重入导致的崩溃 083
3.3.3 文件系统设备栈引起的重入 087
第4章 用户环境缺陷的调试 093
4.1 与用户保持联系 093
4.1.1 无法及时联系用户的原因 093
4.1.2 简单快速获取反馈 094
4.1.3 用正确的方式和用户接触 095
4.2 建议用户使用转储文件协助调试 095
4.2.1 手动开启崩溃转储的设置 096
4.2.2 默认开启崩溃转储并上传转储文件 097
4.2.3 强制生成转储文件 099
4.3 编写一个强制蓝屏工具 100
4.3.1 使用代码安装一个驱动程序 100
4.3.2 以管理员模式运行及提权 103
4.3.3 加载驱动程序 106
4.3.4 完成并加载蓝屏驱动程序 108
4.4 转储文件分析示例 111
4.4.1 非法内存访问的转储文件 111
4.4.2 进程强卡死的转储文件 115
4.4.3 内存泄漏的转储文件 119
第5章 海量用户项目开发与调试 122
5.1 “无法调试”的缺陷 123
5.1.1 缺陷到底能否被解决 123
5.1.2 解决缺陷的通用手段和模式 125
5.1.3 用分段排除法调整定位缺陷 126
5.2 模块划分为基础的调整 128
5.2.1 通用的模块划分方法 128
5.2.2 内核程序功能划分与开关 131
5.2.3 利用配置进行动态开关 135
5.3 建立自监控机制 138
5.3.1 初始化过程的监控 139
5.3.2 功能有效性的自我监控 144
5.3.3 持续执行的心跳监控 148
5.4 利用海量用户定位未知缺陷 151
5.4.1 用随机对照试验来确认未知缺陷 151
5.4.2 确定外网内核驱动程序“健康度” 154
5.4.3 继续分组对比以确认未知缺陷 155
5.4.4 在发布和更新中持续监控健康度 157
第6章 内核挂钩与冲突问题调试 158
6.1 解决冲突的正确方式 158
6.1.1 积极但低调地解决问题 158
6.1.2 用户价值才是唯一取向 159
6.2 挂钩的开发 161
6.2.1 被挂钩的程序 162
6.2.2 枚举和注册回调的时序 164
6.2.3 导入地址表的检索 170
6.2.4 挂钩的实现 175
6.3 冲突的发现、分析与解决 183
6.3.1 冲突的现象 183
6.3.2 用dps命令手工解析调用栈 185
6.3.3 逆向分析第三方程序并解决问题 189
6.3.4 肇事方视角定位解决问题 192
第7章 文件系统过滤与逆向调试 195
7.1 微过滤驱动 195
7.1.1 补齐微过滤驱动所需要的注册表项 196
7.1.2 启动微过滤驱动程序 202
7.1.3 对文件打开进行过滤 205
7.2 微过滤驱动的动态卸载问题 210
7.2.1 重现缺陷并进行初步定位 211
7.2.2 寻找案发第一现场 213
7.3 利用IDA Pro进行静态分析 216
7.3.1 IDA Pro操作入门 216
7.3.2 利用IDA Pro F5逆向FltUnregisterFilter 219
7.3.3 逆向nt模块中的ExWaitForRundownProtectionRelease 223
7.4 IDA Pro分析和WinDbg调试的协同 225
7.4.1 通过符号表查找线索 225
7.4.2 IDA Pro静态分析寻找调用者 226
7.4.3 WinDbg动态调试寻找调用者 229
第8章 非文档开发与调试 233
8.1 使用非文档方式定位函数 233
8.1.1 内核函数的公开、导出和未导出 234
8.1.2 绕过导入表来定位函数 236
8.1.3 间接定位函数的代码实现 239
8.2 使用非文档方式探索内核功能 243
8.2.1 尝试监控MmMaploSpace的调用 243
8.2.2 研究PTE Tracker如何开启 246
8.2.3 解决PTE Tracker开启后的蓝屏问题 249
8.3 逆向Windows内核数据结构 251
8.3.1 从公开参数到未公开参数 251
8.3.2 从参数到内部变量和结构 254
8.3.3 通过各种参考资料逆向内核 260
8.4 实现非文档操作的编码实现 264
8.4.1 从确认操作系统的版本开始 264
8.4.2 确定需要的全局变量和数据结构 265
8.4.3 定位全局变量的位置 268
8.4.4 读取PTE Tracker记录并进行验证 275

本目录推荐