调试巨著

本书深入讲解Windows高级调试技术和工具,包括调试器使用、内存管理、安全分析等内容,适合Windows开发人员和技术支持人员参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Windows高级调试》

 

 

 

 

内容简介

 

    本书主要讲解Windows 高级调试思想和工具,并涉及一些高级调试主题。本书内容主要包括:工具简介、调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64 位调试、事后调试、Windows Vista 基础以及应用程序验证器的测试设置等。本书内容详实、条理清楚。

 

本书适合Windows 开发人员、Windows 测试人员和Windows 技术支持人员等参考。

 


 

译者序

序言

前言

作者简介

第一部分        

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 以及MSRPC 通信  254

8.3  远程通信分析   260

8.3.1  RPC 故障测定状态信息的使用    260

8.3.2  网络流量分析 270

8.3.3  打破调用路径 275

8.4  一些其他的技术信息 277

8.4.1  远程认证 277

8.4.2  RPC 扩展错误信息  278

8.4.3  其他工具 278

8.5  小结   279

9 章 资源泄漏    280

9.1  什么是资源泄漏 280

9.2  高层流程   280

9.2.1  步骤1 :找出潜在的资源泄漏    281

9.2.2  步骤2 :什么东西正在泄漏  282

9.2.3  步骤3 :初步分析  282

9.2.4  步骤4 :资源泄漏检测工具  282

9.2.5  步骤5 :制定回避策略  283

9.3  资源泄漏的可重现性 283

9.4  句柄泄漏   284

9.4.1  存在泄漏的程序   285

9.4.2  步骤1 和步骤2 :它是不是一个

句柄泄漏    286

9.4.3  步骤3 :初始分析  287

9.4.4  更复杂的程序 290

9.4.5  步骤4 :利用泄漏检测工具  292

9.4.6  句柄注入与!htrace    298

9.4.7  步骤5 :为句柄泄漏制定回避策略    300

9.5  内存泄漏   301

9.5.1  一个简单的内存泄漏   301

9.5.2  步骤1 和步骤2 :是否存在泄漏,

以及泄漏的是什么资源    302

9.5.3  步骤3 :使用内存检测工具  303

9.5.4  步骤4 :回避策略  322

9.6  小结   322

10 章 同步   323

10.1  同步的基础知识    323

10.1.1  事件    323

10.1.2  临界区  325

10.1.3  互斥体  329

10.1.4  信号量  330

10.2  高层流程  331

10.2.1  步骤1 :识别问题的征兆   331

10.2.2  步骤2 :转储所有线程 331

10.2.3  步骤3 :分析线程中的同步问题 332

10.2.4  步骤4 :修复问题 334

10.2.5  步骤5 :制定回避策略 334

10.3  同步情况  334

10.3.1  死锁    334

10.3.2  第1 种孤立临界区情况—异常  338

10.3.3  第2 种孤立临界区情况—线程

结束    343

10.3.4  DllMain 函数的注意事项   347

10.3.5  锁竞争  353

10.3.6  管理临界区  358

10.4  小结  361

第三部分 高 级 主 题

11 章 编写定制的调试扩展 363

11.1  调试扩展简介  363

11.2  调试扩展示例  365

11.2.1  调试扩展模型    369

11.2.2  调试扩展示例的需求  371

11.2.3  头文件和代码组织    372

11.2.4  调试扩展的初始化    374

11.2.5  调试会话状态的变化  379

11.2.6  KnownStructOutput   379

11.2.7  退出调试扩展    379

11.2.8  Help 命令的实现  380

11.2.9  dumptree 命令的实现  381

11.2.10  KnownStructOutput 函数的实现    384

11.2.11  取消命令的实现 387

11.2.12  版本   389

11.2.13  调试扩展的构建 389

11.3  小结  390

12 章 64 位调试   391

12.1  Microsoft 64 位系统    391

12.1.1  操作系统简介    392

12.1.2  在WOW64 中运行的32 位程序   393

12.2  Windows x64 带来的变化 395

12.2.1  第1 章—调试工具简介    396

12.2.2  第2 章—调试器简介  397

12.2.3  第3 章—调试器揭密  407

12.2.4  第5 章—内存破坏之一—栈    411

12.2.5  第6 章—内存破坏之二—堆    411

12.2.6  第7 章—安全    412

12.2.7  第8 章—进程间通信  413

12.2.8  第11 章—编写定制的调试扩展 414

12.3  小结  414

13 章 事后调试   415

13.1  转储文件基础  415

13.1.1  通过调试器来生成转储文件    417

13.1.2  通过ADPlus 来生成转储文件   420

13.1.3  内核态转储文件的创建    421

13.2  转储文件的使用    423

13.2.1  转储文件的分析:访问违例    424

13.2.2  转储文件的分析:句柄泄漏    425

13.3  Windows 错误报告   429

13.3.1  Dr.Watson   429

13.3.2  Windows 错误报告的系统架构   434

13.4  企业错误报告  446

13.4.1  设置企业错误报告    447

13.4.2  通过企业错误报告来报告错误  449

13.5  小结  451

14 章 功能强大的工具 452

14.1  调试诊断工具  452

14.1.1  分析内存泄漏或者句柄泄漏    453

14.1.2  编写定制的分析脚本  455

14.2  扩展命令!analyze  457

14.2.1  故障程序    457

14.2.2  分析结果    458

14.2.3  故障的跟进人员  462

14.3  小结  463

15 章 Windows Vista 基础  464

15.1  第1 章—调试工具简介  464

15.2  第2 章—调试器简介    465

15.2.1  用户访问控制的副作用    465

15.2.2  启用内核态调试器    467

15.2.3  地址空间布局的随机化    468

15.3  第6 章—内存破坏之二—堆  469

15.4  第7 章—安全性    473

15.4.1  用户访问控制    474

15.4.2  调试器中的UAC   475

15.4.3  注册表和文件虚拟化  479

15.5  第8 章—进程间通信    481

15.6  第9 章—资源泄漏  482

15.7  第10 章—同步 482

15.7.1  轻量读写锁  482

15.7.2  条件变量    483

15.7.3  单次初始化  484

15.7.4  增强线程池  484

15.8  第11 章—编写定制的调试扩展   484

15.9  第13 章—事后调试 485

15.10  小结 487

附录A  应用程序验证器的测试设置 488

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值