《Windows调试内幕——实用调试与跟踪技巧》翻译 Day 1: 目录

本指南全面覆盖Windows软件开发及调试技巧,从基础知识到高级应用,深入探讨Windows架构、编程接口、调试工具与技巧,包括用户态与内核态调试、代码分析、跟踪场景等,适合各水平开发者。

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

转载请注明出处,谢谢

翻译时间:2019-02-25

译者:周林

翻译进度:14/600(2.3%)

原书对应页码:第v页 ~ 第xiv页

 

目录


                                            前言                                                                              第xv页

                                            简介                                                                              第xvii页

                                           目标读者                                                                       第xviii页

                                           前置知识                                                                       第xviii页

                                           本书组织结构                                                                第xviii页

                                           本书表达惯例                                                                第xix页

                                           系统要求                                                                       第xx页

                                           样例代码                                                                       第xxi页

                                                   安装样例代码                                                        第xxi页

                                                   运行样例代码                                                        第xxii页

                                           鸣谢                                                                              第xxvi页

                                           勘误与支持                                                                   第xxvii页

                                           倾听读者声音                                                               第xxviii页

                                           保持联系                                                                      第xviii页              

 

第一部分          背景介绍


第1章                      Windows软件开发                                                          第3页

                               Windows之演进                                                              第3页

                                      Windows版本历史回顾                                            第3页

                                      所支持的CPU架构                                                   第4页

                                      Windows构建(Build)的分类                                第5页

                                     Windows版本命名规范                                             第6页

                              Windows架构                                                                  第7页

                                      内核态 vs. 用户态                                                    第8页

                                      用户态系统进程                                                       第9页

                                      用户态应用程序进程                                                第10页

                                      Windows底层通信机制                                            第13页

                              Windows编程接口                                                           第16页

                                        开发文档资源                                                        第16页

                                        WDM、KDMF与UMDF                                         第17页

                                        NTDLL与USER32层                                             第18页

                                        Win32 API层                                                         第18页

                                        COM层                                                                  第19页

                                        CLR(.NET)层                                                    第25页

                             微软开发工具包                                                                第28页 

                                        Windows DDK(WDK)                                        第29页

                                        Windows SDK                                                       第29页

                              综述                                                                                 第30页 

 

第二部分


第2章                    让我们开始吧                                                                   第33页

                             调试工具介绍                                                                   第34页

                                    获取Windows调试器工具包                                      第34页

                                    获取Visual Studio调试器                                          第38页

                                    WinDBG与Visual Studio调试器之比较                     第38页

                            用户态调试                                                                       第39页

                                     调试你的第一个程序                                               第39页

                                     显示局部变量与函数参数的值                                 第47页

                                     使用WinDBG进行源代码级调试                              第52页

                                     调试符号文件、调试服务器与本地缓存                  第53页

                                     缓存调试符号用于离线使用WinDBG                      第55页

                                    解决WinDBG中的符号解析问题                              第56页

                                    符号名字之修饰的考量                                            第57页

                                    WinDBG命令速查                                                    第58页

                          内核态调试                                                                        第60页

                                     你的第一个(在线)内核调试会话                         第61页

                                     使用物理机建立内核态调试环境                            第67页

                                     使用虚拟机建立内核态调试环境                            第73页

                                     诊断宿主机/目标机通信问题                                  第76页

                                     理解KD Break-in次序                                            第77页

                                     用内核态调试器控制目标机                                   第81页

                                     在内核调试器中设置代码断点                               第83页

                                     WinDBG内核调试命令速查                                   第83页

                             综述                                                                               第83页

 

第3章                    Window调试器是如何工作的                                         第85页

                             用户态调试                                                                      第85页

                                    架构概览                                                                  第86页

                                    Win32调试API                                                          第87页

                                    调试事件与异常                                                        第88页

                                    Break-in序列                                                            第91页

                                    设置代码断点                                                           第93页

                                   在WinDBG中观察代码断点之插入                            第93页

                             内核态调试                                                                     第98页

                                     架构概览                                                                 第98页

                                     设置代码断点                                                          第100页

                                     切换当前进程上下文                                              第101页

                             托管代码调试                                                                  第103页

                                     架构概览                                                                 第103页

                                     SOS之Windows调试器扩展                                    第106页

                              脚本调试                                                                         第112页

                                     架构概览                                                                  第112页

                                     在Visual Studio中调试脚本                                      第114页

                              远程调试                                                                         第116页

                                      架构概览                                                                 第116页

                                      用WinDBG远程调试                                               第117页

                                      用Visual Studio远程调试                                        第121页

                             综述                                                                                第123页

第4章                    事后调试                                                                          第125页

                              即时(Just-In Time)调试                                              第125页

                                    你的第一个JIT调试实验                                            第126页

                                    即时调试器运行原理                                                 第128页

                                    将Visual Studio作为你的即时调试器                         第132页

                                    运行时(Run-Time)断言与即时调试                       第138页

                             转储调试                                                                          第139页

                                    自动生成用户态崩溃转储文件                                  第139页

                                    使用WinDBG调试器分析崩溃转储                           第143页

                                    在Visual Studio中分析崩溃转储                               第144页

                                    手动生成转储文件                                                    第151页

                                    “前后回溯式(Time Travel)”调试                           第153页

                                    内核态事后调试                                                       第153页

                             综述                                                                                 第157页 

第5章                    高级特性与技巧                                                               第159页

                             非入侵式调试                                                                  第159页

                             数据断点                                                                          第162页

                                    深度解密用户态与内核态数据断点                           第163页

                                    清除内核态数据断点                                                第163页

                                    执行数据断点 vs. 代码断点                                     第166页

                                   用户态调试器之数据断点实战:C++

                                   全局对象与C运行时库                                              第168页

                                   内核态数据断点实战:等待进程退出                        第170页

                                  进阶示例:谁改了注册表的值                                    第172页

                           脚本调试器                                                                        第176页

                                   使用调试器脚本来执行调试命令                               第176页

                                   调试器中的伪寄存器                                                 第178页 

                                   调试器脚本实战:在内核调试器中显示

                                   Windows服务进程                                                     第181页

                            WOW64调试                                                                    第183页

                                   WOW64环境                                                             第184页

                                   调试WOW64进程                                                      第184页

                            Windows调试钩子(GFLAGS)                                      第187页

                                   系统级 vs. 进程级NT全局标志(NT Global Flags) 第187页

                                   GFLAGS工具                                                            第188页

                                   !gflag调试器扩展命令                                                第191页

                                   用户态调试器对NT全局标志的影响                           第193页

                             综述                                                                                 第194页                                   

第6章                    代码分析工具                                                                   第195页

                             静态代码分析                                                                   第195页

                                     使用VC++静态代码分析工具捕获

                                     你的第一个崩溃Bug                                                 第196页

                                     SAL注解                                                                   第199页

                                     其他静态分析工具                                                    第202页

                            运行时代码分析                                                                 第206页

                                    用应用程序验证器(Application Verifier)工具

                                    捕获你的第一个Bug                                                 第206页

                                    揭秘:操作系统中的验证器支持                              第209页

                                    !avrf调试器扩展命令                                                第214页

                                    将应用程序验证器作为质量保证工具                       第217页

                            综述                                                                                  第217页

第7章                    专家调试技巧                                                                   第219页

                              基本技巧

                                      等待调试器附加到目标上                                       第220页

                                      让DLL加载事件触发中断                                         第222页

                                      对进程启动进行调试                                               第227页

                                      对子进程进行调试                                                   第234页

                              更多的有用技巧                                                               第245页

                                     对缺陷代码的调试                                                    第245页

                                     让First-Chance异常通知时触发中断                        第252页

                                      冻结线程                                                                  第253页

                               内核态调试技巧                                                              第255页

                                      让用户态进程创建时触发中断                                  第255页

                                      对用户态进程创建进行调试                                     第259页

                                      让DLL加载事件触发中断                                          第260页  

                                      让未处理的SEH异常触发中断                                  第262页

                                      冻结线程                                                                  第262页

                                综述                                                                               第265页 

第8章                    常见调试场景——第一部分                                             第267页

                             对访问异常的调试                                                            第267页

                                    理解内存访问异常                                                     第268页

                                    !analyze调试器扩展命令                                           第269页

                              堆被破坏问题之调试                                                       第271页

                                      本地堆被破坏问题之调试                                        第271页

                                      托管(GC)堆被破坏问题之调试                           第281页

                              堆栈被破坏问题之调试                                                   第291页

                                     基于堆栈的缓冲区破坏                                            第291页

                                     在调研堆栈被破坏问题时使用数据断点                   第294页

                                     从被破坏的堆栈重建调用栈帧                                 第295页

                             堆栈溢出问题之调试                                                       第297页

                                    理解堆栈溢出                                                           第297页

                                    kf调试器命令                                                            第299页

                             句柄泄露问题之调试                                                       第300页

                                    句柄泄露问题示例                                                    第300页

                                    !htrace调试器扩展命令                                             第302页

                             用户态内存泄露问题之调试                                             第307页

                                    使用应用程序验证器工具侦测资源泄露                    第307页

                                    使用UMDH工具调研内存泄露问题                           第310页

                                    扩展技巧:一个自定义引用堆栈跟踪之数据库         第314页

                             内核态内存泄漏问题之调试                                             第316页

                                     内核内存的基本概念                                                第316页

                                     使用池标记(Pool Tagging)调研内核态泄露         第318页

                            综述                                                                                   第322页

                             

第9章                   常见调试场景——第二部分                                             第323页

                            对竞态问题的调试                                                            第323页

                                   共享态一致性Bug                                                      第324页

                                   共享态生命管理Bug                                                  第330页

                                   DLL模块生命周期惯例Bug                                        第340页

                             对死锁问题的调试                                                           第343页

                                     锁顺序造成的死锁                                                   第344页

                                     逻辑死锁                                                                 第348页

                             对访问检查(Access-Check)问题的调试                     第352页

                                    基本的NT安全模型                                                  第353页

                                     Windows Vista的改进                                             第358页

                                     打包                                                                        第362页

                              综述                                                                               第363页

                              

第10章                  调试子系统揭秘                                                             第365页

                             Windows控制台子系统                                                  第366页 

                                    printf背后的魔法                                                     第366页

                                    处理Windows UI事件                                              第373页

                                    处理Ctrl+C热键信号                                                第374页

                             系统调用的原子性                                                          第380页

                                     系统调用的用户态部分                                           第381页

                                     切换到内核态                                                         第383页

                                     系统调用的内核态部分                                           第385页

                            综述                                                                                 第387页

 

第三部分


第11章                 利用Xperf                                                                         第391页

                            获取Xperf                                                                         第391页

                            你的首次Xperfd调研                                                        第396页

                                   设计一个调研策略                                                     第397页

                                   基于当前场景收集ETW Trace                                   第397页

                                   分析收集到的ETW Trace                                          第399页

                           Xperf的优缺点                                                                   第411页

                           综述                                                                                   第412页                           

第12章                 ETW揭秘                                                                          第415页

                            ETW架构                                                                          第416页

                                    ETW设计原理                                                           第416页

                                    ETW组件                                                                  第417页

                                    特殊的的NT内核日志会话                                         第418页

                                    使用Xperf配置ETW会话                                           第419页

                           Windows中现有的ETW工具                                              第422页

                                      Windows内核中的工具                                           第422页

                                      其他Windows组件的工具                                       第426页

                            理解ETW的堆栈回溯事件                                                第431页

                                     使能与查看内核态生产者事件的堆栈跟踪               第432页

                                     使能与查看用户态生产者事件的堆栈跟踪               第434页

                                      诊断ETW堆栈回溯问题                                          第436页

                            向你的代码中添加ETW日志                                             第441页

                                      ETW事件的原子性                                                 第441页

                                      使用ETW Win32 API记录事件                               第445页

                            综述                                                                                  第455页           

 

第13章                常见跟踪场景                                                                    第457页

                           分析阻塞时间                                                                     第458页

                                 CSwitchReadyThread ETW事件                              第459页

                                 使用Visual Studio 2010进行等待分析                          第461页

                                 使用Xperf进行等待分析                                                第467页

                           分析内存使用情况                                                               第473页

                                 目标进程内存使用情况的高阶分析                                第474页

                                  NT堆内存使用情况分析                                               第475页

                                  GC堆(.NET)内存使用情况分析                               第481页

                           作为调试助手的跟踪技巧                                                     第490页

                                  跟踪缺陷代码                                                               第490页

                                  跟踪系统内幕                                                               第494页

                            综述                                                                                   第502页       

            

附录A                 WinDBG用户态调试快速上手                                            第505页

                            启动用户态调试会话                                                         第505页

                            设定调试符号路径                                                             第505页

                            设定源代码路径                                                                 第506页

                            显示目标进程的命令行                                                      第507页

                            控制流命令                                                                        第507页

                            显示加载模块和它们的版本号                                           第508页

                             解析函数/方法地址                                                           第509页

                             设置代码(软件)断点                                                     第509页

                             设置数据(硬件)断点                                                     第510页

                             线程切换                                                                          第511页

                             显示函数/方法参数                                                           第512页

                             显示局部变量                                                                   第513页

                             显示本地类型的数据成员                                                 第513页

                             在调用栈帧之间切换                                                        第514页

                             显示函数/方法的汇编代码                                                第515页

                             显示和修改内存与寄存器的值                                          第518页

                             终止用户态调试会话                                                        第518页 

                                                           

附录B                 WinDBG内核态调试快速上手                                            第519页

                            启动内核态调试会话                                                         第519页

                            切换CPU上下文                                                                第519页

                            显示进程信息                                                                    第520页

                            显示线程信息                                                                    第521页

                            切换进程与线程上下文                                                      第522页

                            显示加载模块和它们的版本号                                           第523页

                            在内核态代码中设置代码(软件)断点                             第524页

                            在用户态代码中设置代码(软件)断点                             第525页

                            设置数据(硬件)断点                                                      第525页

                             终止内核态调试会话                                                         第526页                         

 

                                                               索引                                               第527页

                                                               关于作者                                        第561页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值