第一部分 概 述
第1章 调试工具简介 1
1.1.泄漏诊断工具 1
1.2.Windows调试工具集 3
1.3.UMDH 4
1.4.Microsoft.应用程序验证器 4
1.5.全局标志 9
1.6.进程浏览器11
1.7.Windows驱动程序开发包 12
1.8.Wireshark 14
1.9.DebugDiag 15
1.10.小结 15
第2章.调试器简介 16
2.1.调试器的基础知识 16
2.1.1.调试器类型 17
2.1.2.调试器命令 18
2.1.3.调试器的配置19
2.1.4.通过内核态调试器重定向用户
态调试器 24
2.1.5.是否使用KD 26
2.2.基本的调试任务26
2.2.1.键入调试命令27
2.2.2.解析调试器的提示信息27
2.2.3.配置和使用符号 29
2.2.4.使用源文件 38
2.2.5.分析命令40
2.2.6.修改上下文的命令60
2.2.7.其他的辅助命令 67
2.2.8.示例68
2.3.远程调试 70
2.3.1.Remote.exe 70
2.3.2.调试服务器 71
2.3.3.进程服务器与内核服务器 73
2.3.4.远程调试中的符号解析74
2.3.5.远程调试中的源代码解析 75
2.4.调试场景 75
2.4.1.调试非交互式进程(服务
或者COM服务器) 76
2.4.2.在没有内核态调试器的情况
下调试非交互式进程(服务
或者COM服务器) 77
2.5.小结 77
第3章.调试器揭密 78
3.1.用户态调试器的内幕78
3.1.1.操作系统对用户态调试器的支持78
3.1.2.调试事件的顺序 83
3.1.3.控制来自调试器的异常和事件 84
3.1.4.内核态调试器中的调试事件处理105
3.2.控制调试目标 106
3.2.1.断点的工作原理 107
3.2.2.内存访问断点的工作原理 108
3.2.3.处理器跟踪 109
3.2.4.实时调试中的线程状态管理109
3.2.5.通过用户态调试器来挂起线程 112
3.3.小结 113
第4章.符号文件与源文件的管理 114
4.1.调试符号的管理114
4.1.1.公有符号的生成 115
4.1.2.在符号库中存储符号 117
4.1.3.在HTTP服务器上共享公有符号 119
4.2.源文件的管理 120
4.2.1.收集源文件信息 120
4.2.2.源文件信息的使用122
4.2.3.不带源文件修订控制的源文件
服务器 123
4.3.小结 125
第二部分.调 试 实 践
第5章.内存破坏之一—栈 127
5.1.内存破坏的检测过程128
5.1.1.步骤1:状态分析 128
5.1.2.步骤2:源代码分析 129
5.1.3.步骤3:使用内存破坏检测工具 133
5.1.4.步骤4:调整源代码 133
5.1.5.步骤5:定义回避策略 133
5.2.栈内存破坏133
5.2.1.栈溢出 142
5.2.2.异步操作与栈顶指针 147
5.2.3.调用约定的不匹配154
5.2.4.回避策略164
5.3.小结 166
第6章.内存破坏之二—堆 167
6.1.堆简介167
6.1.1.前端分配器 168
6.1.2.后端分配器 169
6.2.堆破坏181
6.2.1.使用未初始化状态181
6.2.2.堆的上溢与下溢 185
6.2.3.堆句柄的不匹配 195
6.2.4.重用已删除的堆块199
6.3.小结 205
第7章.安全 206
7.1.Windows安全概述 206
7.1.1.安全标识符 207
7.1.2.访问控制列表208
7.1.3.安全描述符 209
7.1.4.访问令牌211
7.2.安全信息的来源213
7.2.1.访问令牌213
7.2.2.安全描述符 215
7.3.如何执行安全检查 217
7.4.在客户端/服务器程序中传播标识 218
7.4.1.远程认证与安全支持提供者接口218
7.4.2.模拟级别220
7.5.系统边界上的安全检查 220
7.6.安全故障的分析221
7.6.1.本地安全故障221
7.6.2.延迟初始化中的安全问题 226
7.6.3.身份模拟的潜在安全问题 231
7.6.4.分布式COM错误 232
7.6.5.扩展命令!token的故障241
7.6.6.在Windows XP SP2上安装了
某个程序后发生DCOM激活故障243
7.6.7.通过跟踪工具来分析安全故障 247
7.7.小结 248
第8章.进程间通信 249
8.1.通信机制 249
8.2.本地通信分析 250
8.2.1.LPC的背景知识 251
8.2.2.调试LPC通信251
8.2.3.调试本地DCOM以及MSR
1