返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:

  • 软件调试 卷2:Windows平台调试(第2版)(全2册) 张银奎 著 专业科技 文轩网
  • 新华书店正版
    • 作者: 张银奎著
    • 出版社: 人民邮电出版社
    • 出版时间:2020-09-01 00:00:00
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    文轩网图书旗舰店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品分类

         https://product.suning.com/0070067633/11555288247.html

     

    商品参数
    • 作者: 张银奎著
    • 出版社:人民邮电出版社
    • 出版时间:2020-09-01 00:00:00
    • 版次:1
    • 印次:1
    • 印刷时间:2020-09-01
    • 页数:858
    • 开本:16开
    • 装帧:平装
    • ISBN:9787115538383
    • 国别/地区:中国
    • 版权提供:人民邮电出版社

    软件调试 卷2:Windows平台调试(第2版)(全2册)

    作  者:张银奎 著
    定  价:199
    出 版 社:人民邮电出版社
    出版日期:2020年09月01日
    页  数:888
    装  帧:平装
    ISBN:9787115538383
    主编推荐

    1. 软件调试领域的“百科全书”,围绕软件调试的“生态”系统(ecosystem)、异常(exception)和调试器三条主线,介绍软件调试的相关原理和机制,探讨可调试性(debuggability)的内涵、意义,以及实现软件可调试性的原则和方法,总结软件调试的理论和很好实践; 2. 作者张银奎是软件调试领域资-深专家,国内软件调试技术专家; 3. 内容全面:为了便于携带和阅读,装定为上、下两册; 4. 理论与实践结合:不仅涵盖了相关的技术背景知识,还深入研讨了大量具有代表性的技术细节; 5. 第2版新增了近几年流行的开发环境等内容; 6. 本书配套网站上提供示例程序的源代码和编译好的二进制文件。

    内容简介

    本书是国内当前集中介绍软件调试主题的权威著作。本书第2卷分为5篇,共30章,主要围绕Windows系统展开介绍。第一篇(第1~4章)介绍Windows系统简史、进程和线程、架构和系统部件,以及Windows系统的启动过程,既从空间角度讲述Windows的软件世界,也从时间角度描述Windows世界的搭建过程。第二篇(第5~8章)描述特殊的过程调用、垫片、托管世界和Linux子系统。第三篇(第9~19章)深入探讨用户态调试模型、用户态调试过程、中断和异常管理、未处理异常和JIT调试、硬错误和蓝屏、错误报告、日志、事件追踪、WHEA、内核调试引擎和验证机制。第四篇(第20~25章)从编译和编译期检查、运行时库和运行期检查、栈和函数调用、堆和堆检查、异常处理代码的编译、调试符号等方面概括编译器的调试支持。第五篇(第26~30章)首先纵览调试器的发展历史、工作模型和经典架构,然后分别讨论集成在Vinull

    作者简介

    张银奎,国内知名的调试技术专家。毕业于上海交通大学信息与控制工程系,长期从事软件开发和研究工作,曾在英特尔工作13 年,对 IA-32 架构、操作系统内核、驱动程序,尤其是对软件调试有较深入的研究。

    精彩内容

    目录
    第一篇大局观
    第1章Windows系统简史
    1.1源于DOS
    1.2功在NT
    1.3Windows2000彰显实力
    1.4巅峰之作:WindowsXP和WindowsServer2003
    1.5WindowsVista折戟沙场
    1.6Windows7享利中兴
    1.7Windows8革新受挫
    1.8Windows10何去何从
    1.9本章总结17
    参考资料
    第2章进程和线程
    2.1任务
    2.2进程资源
    2.3进程空间
    2.3.132位进程空间
    2.3.264位进程空间
    2.4EPROCESS结构
    2.5PEB
    2.6内核模式和用户模式
    2.6.1访问模式
    2.6.2使用INT2E切换到内核模式
    2.6.3快速系统调用
    2.6.4逆向调用
    2.6.5实例分析
    2.7线程
    2.7.1ETHREAD
    2.7.2TEB
    2.8WoW进程
    2.8.1架构
    2.8.2工作过程
    2.8.3注册表重定向
    2.8.4注册表反射
    2.8.5文件系统重定向
    2.9创建进程
    2.10最小进程和Pico进程
    2.10.1最小进程
    2.10.2Pico进程
    2.11任务管理器
    2.12本章总结
    参考资料
    第3章架构和系统部件
    3.1系统概览
    3.1.1内核空间
    3.1.2用户空间
    3.2内核和HAL模块
    3.2.1内核文件
    3.2.2HAL文件
    3.3空闲进程
    3.4系统进程
    3.5内核空间的其他模块
    3.6NTDLL.DLL
    3.6.1角色
    3.6.2调用系统服务的桩函数
    3.6.3映像文件加载器
    3.6.4运行时库
    3.6.5其他功能
    3.7环境子系统
    3.8原生进程
    3.8.1特点
    3.8.2SMSS
    3.8.3CSRSS
    3.9本章总结
    参考资料
    第4章启动过程
    4.1BootMgr
    4.1.1工作过程
    4.1.2调试方法
    4.2WinLoad
    4.3内核初始化
    4.3.1NT的入口函数
    4.3.2内核初始化
    4.4执行体的阶段0初始化
    4.4.1总体过程
    4.4.2创建特殊进程
    4.5执行体的阶段1初始化
    4.5.1Phase1Initialization
    4.5.2唤醒其他CPU
    4.5.3非启动CPU的起步路线
    4.5.4漫长的I/O初始化
    4.5.5更新进度
    4.6创建用户空间
    4.6.1创建会话管理器进程
    4.6.2建立环境子系统
    4.6.3创建窗口站和桌面
    4.6.4用户登录
    4.7本章总结
    参考资料
    第二篇探微
    第5章特殊的过程调用
    5.1异步过程调用
    5.2中断请求级别
    5.2.1设计初衷
    5.2.2基本原理
    5.2.3析疑
    5.3延迟过程调用
    5.3.1使用模式
    5.3.2黏滞在DPC
    5.4本地过程调用
    5.5远程过程调用
    5.5.1工作模型
    5.5.2RPC子系统服务
    5.5.3端点和协议串
    5.5.4蜂巢
    5.5.5案例和调试方法
    5.6本章总结
    参考资料
    第6章垫片
    6.1垫片数据库
    6.1.1认识SDB文件
    6.1.2定制的SDB文件
    6.1.3修补模式
    6.2AppHelp
    6.2.1SDB功能
    6.2.2垫片引擎
    6.2.3AD挂钩
    6.2.4穿山甲挂钩
    6.3垫片动态库
    6.3.1AcLayers.DLL
    6.3.2AcGenral.DLL和AcSpecfc.DLL
    6.3.3其他垫片模块
    6.4应用程序垫片的工作过程
    6.4.1在父进程中准备垫片数据
    6.4.2在新进程中加载和初始化垫片引擎
    6.4.3加载垫片模块
    6.4.4落实挂钩
    6.4.5执行垫片
    6.5内核垫片引擎
    6.5.1数据和配置
    6.5.2初始化
    6.5.3KSE垫片结构
    6.5.4注册垫片
    6.5.5部署垫片
    6.5.6执行垫片
    6.6本章总结
    参考资料
    第7章托管世界
    7.1简要历史
    7.2宏伟蓝图
    7.3类和方法表
    7.4辅助调试线程
    7.4.1托管调试模型
    7.4.2RCThread
    7.4.3刺探线程
    7.5CLR4的调试模型重构
    7.6SOS扩展
    7.6.1加载SOS
    7.6.2设置断点
    7.6.3简要原理
    7.7本章总结
    参考资料
    第8章Linux子系统
    8.1源于Drawbridge
    8.2融入NT
    8.3总体架构
    8.4子系统内核模块
    8.5微软版Linux内核
    8.6Linux子系统服务器
    8.7WSL启动器
    8.8交叉开发
    8.9WSL2
    8.10本章总结
    参考资料
    第三篇操作系统的调试支持
    第9章用户态调试模型
    9.1概览
    9.1.1参与者
    9.1.2调试子系统
    9.1.3调试事件驱动
    9.2采集调试消息
    9.2.1消息常量
    9.2.2进程和线程创建消息
    9.2.3进程和线程退出消息
    9.2.4模块映射和反映射消息
    9.2.5异常消息
    9.3发送调试消息
    9.3.1调试消息结构
    9.3.2DbgkpSendApiMessage函数
    9.3.3控制被调试进程
    9.4调试子系统服务器(WindowsXP之后)
    9.4.1DebugObject
    9.4.2创建调试对象
    9.4.3设置调试对象
    9.4.4传递调试消息
    9.4.5杜撰的调试消息
    9.4.6清除调试对象
    9.4.7内核服务
    9.4.8全景
    9.5调试子系统服务器(WindowsXP之前)
    9.5.1概览
    9.5.2Windows会话管理器
    9.5.3Windows环境子系统服务器进程
    9.5.4调用CSRSS的服务
    9.5.5CsrCreateProcess服务
    9.5.6CsrDebugProcess服务
    9.6比较两种模型
    9.6.1Windows2000调试子系统的优点
    9.6.2Windows2000调试子系统的安全问题
    9.6.3WindowsXP的调试模型的优点
    9.6.4WindowsXP引入的新调试功能
    9.7NTDLL.DLL中的调试支持例程
    9.7.1DbgUi函数
    9.7.2DbgSs函数
    9.7.3Dbg函数
    9.8调试API
    9.9本章总结
    参考资料
    第10章用户态调试过程
    10.1调试器进程
    10.1.1线程模型
    10.1.2调试器的工作线程
    10.1.3DbgSsReserved字段
    10.2被调试进程
    10.2.1特征
    10.2.2DebugPort字段
    10.2.3BeingDebugged字段
    10.2.4观察DebugPort字段和BeingDebugged字段
    10.2.5调试会话
    10.3从调试器中启动被调试程序
    10.3.1CreateProcessAPI
    10.3.2第一批调试事件
    10.3.3初始断点
    10.3.4自动启动调试器
    10.4附加到已经启动的进程中
    10.4.1DebugActiveProcessAPI
    10.4.2示例:TinyDbgr程序
    10.5处理调试事件
    10.5.1DEBUG_EVENT结构
    10.5.2WaitForDebugEventAPI
    10.5.3调试事件循环
    10.5.4回复调试事件
    10.5.5定制调试器的事件处理方式
    10.6中断到调试器
    10.6.1初始断点
    10.6.2编程时加入断点
    10.6.3通过调试器设置断点
    10.6.4通过远程线程触发断点异常
    10.6.5在线程当前执行位置设置断点
    10.6.6动态调用远程函数
    10.6.7挂起中断
    10.6.8调试快捷键(F12键)
    10.6.9窗口更新
    10.7输出调试字符串
    10.7.1发送调试信息
    10.7.2使用调试器接收调试信息
    10.7.3使用工具接收调试信息
    10.8终止调试会话
    10.8.1被调试进程退出
    10.8.2调试器进程退出
    10.8.3分离被调试进程
    10.8.4退出时分离
    10.9本章总结
    参考资料
    第11章中断和异常管理
    11.1中断描述符表
    11.1.1概况
    11.1.2门描述符
    11.1.3执行中断和异常处理函数
    11.1.4IDT一览
    11.2异常的描述和登记
    11.2.1EXCEPTION_RECORD结构
    11.2.2登记CPU异常
    11.2.3登记软件异常
    11.3异常分发过程
    11.3.1KiDispatchException函数
    11.3.2内核态异常的分发过程
    11.3.3用户态异常的分发过程
    11.3.4归纳
    11.4结构化异常处理
    11.4.1SEH简介
    11.4.2SHE机制的终结处理
    11.4.3SEH机制的异常处理
    11.4.4过滤表达式
    11.4.5异常处理块
    11.4.6嵌套使用终结处理和异常处理
    11.5向量化异常处理
    11.5.1登记和注销
    11.5.2调用结构化异常处理器
    11.5.3示例
    11.6本章总结
    参考资料
    第12章未处理异常和JIT调试
    12.1简介
    12.2默认的异常处理器
    12.2.1BaseProcessStart函数中的结构化异常处理器
    12.2.2编译器插入的SEH处理器
    12.2.3基于信号的异常处理
    12.2.4实验:观察默认的异常处理器
    12.2.5BaseThreadStart函数中的结构化异常处理器
    12.3未处理异常过滤函数
    12.3.1WindowsXP之前的异常处理机制
    12.3.2WindowsXP中的异常处理机制
    12.4“应用程序错误”对话框
    12.4.1用HardError机制提示应用程序错误
    12.4.2使用ReportFaultAPI提示应用程序错误
    12.5JIT调试和Dr.Watson
    12.5.1配置JIT调试器
    12.5.2启动JIT调试器
    12.5.3自己编写JIT调试器
    12.6顶层异常过滤函数
    12.6.1注册
    12.6.2C运行时库的顶层过滤函数
    12.6.3执行
    12.6.4调试
    12.7Dr.Watson
    12.7.1配置和查看模式
    12.7.2设置为默认的JIT调试器
    12.7.3JIT调试模式
    12.8DRWTSN32的日志文件
    12.8.1异常信息
    12.8.2系统信息
    12.8.3任务列表
    12.8.4模块列表
    12.8.5线程状态
    12.8.6函数调用序列
    12.8.7原始栈数据
    12.9用户态转储文件
    12.9.1文件格式概览
    12.9.2数据流
    12.9.3产生转储文件
    12.9.4读取转储文件
    12.9.5利用转储文件分析问题
    12.10本章总结
    参考资料
    第13章硬错误和蓝屏
    13.1硬错误提示
    13.1.1缺盘错误
    13.1.2NtRaiseHardError
    13.1.3ExpRaiseHardError
    13.1.4CSRSS中的分发过程
    13.2蓝屏终止
    13.2.1简介
    13.2.2发起和产生过程
    13.2.3诊断蓝屏错误
    13.2.4手工触发蓝屏
    13.3系统转储文件
    13.3.1分类
    13.3.2文件格式
    13.3.3产生方法
    13.4分析系统转储文件
    13.4.1初步分析
    13.4.2线程和栈回溯
    13.4.3陷阱帧
    13.4.4自动分析
    13.5辅助的错误提示方法
    13.5.1MessageBeep
    13.5.2Beep函数
    13.5.3闪动窗口
    13.6配置错误提示机制
    13.6.1SetErrorModeAPI
    13.6.2IoSetThreadHardErrorMode
    13.6.3蓝屏后自动重启
    13.7防止滥用错误提示机制
    13.8本章总结
    参考资料
    第14章错误报告
    14.1WER1.0
    14.1.1客户端
    14.1.2报告模式
    14.1.3传输方式
    14.2系统错误报告
    14.3WER服务器端
    14.3.1WER服务
    14.3.2错误报告分类方法
    14.3.3报告回应
    14.4WER2.0
    14.4.1模块变化
    14.4.2创建报告
    14.4.3提交报告
    14.4.4典型应用
    14.5CER
    14.6本章总结
    参考资料
    第15章日志
    15.1日志简介
    15.2ELF的架构
    15.2.1ELF的日志文件
    15.2.2事件源
    15.2.3ELF服务
    15.3ELF的数据组织350
    15.3.1日志记录
    15.3.2添加日志记录
    15.3.3API一览
    15.4查看和使用ELF日志
    15.5CLFS的组成和原理
    15.5.1组成
    15.5.2存储结构
    15.5.3LSN
    15.6CLFS的使用方法
    15.6.1创建日志文件
    15.6.2添加CLFS容器
    15.6.3创建编组区
    15.6.4添加日志记录
    15.6.5读日志记录
    15.6.6查询信息
    15.6.7管理和备份
    15.7本章总结
    参考资料
    第16章事件追踪
    16.1简介
    16.2ETW的架构
    16.3提供ETW消息
    16.4控制ETW会话
    16.5消耗ETW消息
    16.6格式描述
    16.6.1MOF文件
    16.6.2WPP
    16.7NT内核记录器
    16.7.1观察NKL的追踪事件
    16.7.2编写代码控制NKL
    16.7.3NKL的实现
    16.8GlobalLoggerSession
    16.8.1启动GLS会话
    16.8.2配置GLS
    16.8.3在驱动程序中使用GLS
    16.8.4自动记录器
    16.8.5BootVis工具
    16.9CrimsonAPI
    16.9.1发布事件
    16.9.2消耗事件
    16.9.3格式描述
    16.9.4收集和观察事件
    16.9.5CrimsonAPI的实现
    16.10本章总结
    参考资料
    第17章WHEA
    17.1目标、架构和PSHED.DLL
    17.1.1目标
    17.1.2架构
    17.1.3PSHED.DLL
    17.2错误源
    17.2.1标准的错误源
    17.2.2通过ACPI表来定义错误源
    17.2.3通过PSHED插件来报告错误源
    17.3错误处理过程
    17.3.1WHEA_ERROR_PACKET结构
    17.3.2处理过程
    17.3.3WHEA_ERROR_RECORD结构
    17.3.4固件优先模式
    17.4错误持久化
    17.4.1ERST
    17.4.2工作过程
    17.5注入错误
    17.6本章总结
    参考资料
    第18章内核调试引擎
    18.1概览
    18.1.1KD
    18.1.2角色
    18.1.3组成
    18.1.4模块文件
    18.1.5版本差异
    18.2连接
    18.2.1串行端口
    18.2.21394
    18.2.3USB2.0
    18.2.4管道
    18.2.5选择连接方式
    18.2.6解决连接问题
    18.3启用
    18.3.1BOOT.INI
    18.3.2BCD
    18.3.3高级启动选项
    18.4初始化
    18.4.1Windows系统启动过程概述
    18.4.2第一次调用KdInitSystem
    18.4.3第二次调用KdInitSystem
    18.4.4通信扩展模块的阶段1初始化
    18.5内核调试协议
    18.5.1数据包
    18.5.2报告状态变化
    18.5.3访问目标系统
    18.5.4恢复目标系统执行
    18.5.5版本
    18.5.6典型对话过程
    18.5.7KdTalker
    18.6与内核交互
    18.6.1中断到调试器
    18.6.2KdpSendWaitContinue
    18.6.3退出调试器
    18.6.4轮询中断包
    18.6.5接收和报告异常事件
    18.6.6调试服务
    18.6.7打印调试信息
    18.6.8加载调试符号
    18.6.9更新系统文件
    18.7建立和维持连接
    18.7.1最早的调试机会
    18.7.2初始断点
    18.7.3断开和重新建立连接
    18.8本地内核调试
    18.8.1LiveKD
    18.8.2Windows系统自己的本地内核调试支持
    18.8.3安全问题
    18.9本章总结
    参考资料
    第19章验证机制
    19.1简介
    19.1.1驱动程序验证器
    19.1.2应用程序验证器
    19.1.3WHQL测试
    19.2驱动验证器的工作原理
    19.2.1设计原理
    19.2.2初始化
    19.2.3挂接验证函数
    19.2.4验证函数的执行过程
    19.2.5报告验证失败
    19.3使用驱动验证器
    19.3.1验证项目
    19.3.2启用驱动验证器
    19.3.3开始验证
    19.3.4观察验证情况
    19.3.5WinDBG的扩展命令
    19.4应用程序验证器的工作原理
    19.4.1原理和组成
    19.4.2初始化
    19.4.3挂接API
    19.4.4验证函数的执行过程
    19.4.5报告验证失败
    19.4.6验证停顿
    19.5使用应用程序验证器
    19.5.1应用验证管理器
    19.5.2验证项目
    19.5.3配置验证属性
    19.5.4配置验证停顿
    19.5.5编程调用
    19.5.6调试扩展
    19.6本章总结
    参考资料
    第四篇编译器的调试支持
    第20章编译和编译期检查
    20.1程序的构建过程
    20.1.1链接器
    20.1.2加载器
    20.2编译
    20.2.1前端
    20.2.2后端
    20.3VisualC++编译器
    20.3.1MSVC简史
    20.3.2MSVC6
    20.3.3VS7和VS8
    20.3.4构建程序
    20.3.5调试
    20.4编译错误和警告
    20.4.1错误ID和来源
    20.4.2编译警告
    20.5编译期检查
    20.5.1未初始化的局部变量
    20.5.2类型不匹配
    20.5.3使用编译器指令
    20.5.4标注
    20.5.5驱动程序静态验证器
    20.6标准标注语言
    20.6.1缓冲区标注符
    20.6.2高级标注符
    20.7本章总结
    参考资料.
    第21章运行时库和运行期检查
    21.1C/C++运行时库
    21.1.1C运行时库
    21.1.2C++标准库
    21.2链接运行时库
    21.2.1静态链接和动态链接
    21.2.2lib文件
    21.3运行时库的初始化和清理
    21.3.1介入方法
    21.3.2初始化
    21.3.3多个运行时库实例
    21.4运行期检查
    21.4.1自动的运行期检查
    21.4.2断言
    21.4.3_RPT宏
    21.5报告运行期检查错误
    21.5.1_CrtDbgReport
    21.5.2_CrtSetReportMode
    21.5.3_CrtSetReportFile
    21.5.4_CrtSetReportHook493
    21.5.5_CrtSetReportHook2
    21.5.6使用其他函数报告RTC错误
    21.6本章总结
    参考资料
    第22章栈和函数调用
    22.1简介
    22.1.1用户态栈和内核态栈
    22.1.2函数、过程和方法
    22.2栈的创建过程
    22.2.1内核态栈的创建
    22.2.2用户态栈的创建
    22.2.3跟踪用户态栈的创建过程
    22.3CALL和RET指令
    22.3.1CALL指令
    22.3.2RET指令
    22.3.3观察函数调用和返回过程
    22.3.4跨特权级调用
    22.4局部变量和栈帧
    22.4.1局部变量的分配和释放
    22.4.2EBP寄存器和栈帧
    22.4.3帧指针和栈帧的遍历
    22.5帧指针省略
    22.6栈指针检查
    22.7调用协定
    22.7.1C调用协定
    22.7.2标准调用协定
    22.7.3快速调用协定
    22.7.4This调用协定
    22.7.5CLR调用协定
    22.7.6x64调用协定
    22.7.7通过编译器开关改变默认调用协定
    22.7.8函数返回值
    22.7.9归纳和补充
    22.8栈空间的增长和溢出
    22.8.1栈空间的自动增长
    22.8.2栈溢出
    22.8.3分配检查
    22.9栈下溢
    22.10缓冲区溢出
    22.10.1感受缓冲区溢出
    22.10.2缓冲区溢出攻击
    22.11变量检查
    22.12基于Cookie的安全检查
    22.12.1安全Cookie的产生、植入和检查
    22.12.2报告安全检查失败
    22.12.3编写安全的代码
    22.13本章总结
    参考资料
    第23章堆和堆检查
    23.1理解堆
    23.2堆的创建和销毁
    23.2.1进程的默认堆
    23.2.2创建私有堆
    23.2.3堆列表
    23.2.4销毁堆
    23.3分配和释放堆块
    23.3.1HeapAlloc
    23.3.2CRT分配函数
    23.3.3释放从堆中分配的内存
    23.3.4GlobalAlloc和LocalAlloc
    23.3.5解除提交
    23.4堆的内部结构
    23.4.1结构和布局
    23.4.2HEAP结构
    23.4.3HEAP_SEGMENT结构
    23.4.4HEAP_ENTRY结构
    23.4.5分析堆块的分配和释放过程
    23.4.6使用!heap命令观察堆块信息
    23.5低碎片堆
    23.6堆的调试支持
    23.6.1全局标志
    23.6.2堆释放检查
    23.7栈回溯数据库
    23.7.1工作原理
    23.7.2DH和UMDH工具
    23.7.3定位内存泄漏
    23.8堆溢出和检测
    23.8.1堆缓冲区溢出
    23.8.2调用时验证
    23.8.3堆尾检查
    23.9页堆
    23.9.1总体结构
    23.9.2启用和观察页堆
    23.9.3堆块结构
    23.9.4检测溢出
    23.10准页堆
    23.10.1启用准页堆
    23.10.2结构布局
    23.10.3检测溢出
    23.11CRT堆
    23.11.1CRT堆的3种模式
    23.11.2SBH简介
    23.11.3创建和选择模式
    23.11.4CRT堆的终止
    23.12CRT堆的调试堆块
    23.12.1_CrtMemBlockHeader结构
    23.12.2块类型
    23.12.3分配堆块
    23.13CRT堆的调试功能
    23.13.1内存分配序号断点
    23.13.2分配挂钩
    23.13.3自动和手动检查
    23.14堆块转储
    23.14.1内存状态和检查点
    23.14.2_CrtMemDumpAllObjectsSince
    23.14.3转储挂钩
    23.15泄漏转储
    23.15.1_CrtDumpMemoryLeaks
    23.15.2何时调用
    23.15.3定位导致泄漏的源代码
    23.16本章总结
    参考资料
    第24章异常处理代码的编译
    24.1概览
    24.2FS:[0]链条
    24.2.1TEB和TIB结构
    24.2.2ExceptionList字段
    24.2.3登记异常处理器
    24.3遍历FS:[0]链条
    24.3.1RtlDispatchException
    24.3.2KiUserExceptionDispatcher
    24.4执行异常处理函数
    24.4.1SehRaw实例
    24.4.2执行异常处理函数
    24.5__try{}__except()结构
    24.5.1与手工方法的对应关系
    24.5.2__try{}__except()结构的编译
    24.5.3范围表
    24.5.4TryLevel
    24.5.5__try{}__except()结构的执行
    24.5.6_SEH_prolog和_SEH_epilog
    24.6安全问题
    24.6.1安全Cookie
    24.6.2SAFESEH
    24.6.3基于表的异常处理
    24.7本章总结
    参考资料
    第25章调试符号
    25.1名称修饰
    25.1.1C和C++
    25.1.2C的名称修饰规则
    25.1.3C++的名称修饰规则
    25.2调试信息的存储格式
    25.2.1COFF格式
    25.2.2CodeView格式
    25.2.3PDB格式
    25.2.4DWARF格式
    25.3目标文件中的调试信息
    25.3.1IMAGE_FILE_HEADER结构
    25.3.2IMAGE_SECTION_HEADER结构
    25.3.3节的重定位信息和行号信息
    25.3.4存储调试数据的节
    25.3.5调试符号表
    25.3.6COFF字符串表
    25.3.7COFF符号例析
    25.4PE文件中的调试信息
    25.4.1PE文件布局
    25.4.2IMAGE_OPTIONAL_HEADER结构
    25.4.3调试数据目录
    25.4.4调试数据
    25.4.5使用WinDBG观察PE文件中的调试信息
    25.4.6调试信息的产生过程
    25.5DBG文件
    25.5.1从PE文件产生DBG文件
    25.5.2DBG文件的布局
    25.6PDB文件
    25.6.1复合文件
    25.6.2PDB文件布局
    25.6.3PDB签名
    25.6.4Magic代码
    25.6.5PDB_HEADER
    25.6.6根数据流——流目录
    25.6.7页分配表
    25.6.8访问PDB文件的方式
    25.6.9PDB文件的产生过程
    25.7有关的编译和链接选项
    25.7.1控制调试信息的编译选项
    25.7.2控制调试信息的链接选项
    25.7.3不同链接和编译选项的比较
    25.8PDB文件中的数据表
    25.8.1符号表
    25.8.2源文件表
    25.8.3节贡献表
    25.8.4段信息表
    25.8.5注入源代码表
    25.8.6帧数据表
    25.9本章总结
    参考资料
    第五篇调试器
    第26章调试器概览
    26.1TX-0计算机和FLIT调试器
    26.2小型机和DDT调试器
    26.2.1PDP-1
    26.2.2TOPS-10操作系统和
    DDT-10
    26.3个人计算机和它的调试器
    26.3.18086Monitor
    26.3.2SYMDEB
    26.3.3CodeView调试器
    26.3.4TurboDebugger
    26.3.5SoftICE
    26.4调试器的功能
    26.4.1建立和终止调试会话
    26.4.2控制被调试程序执行
    26.4.3访问内存
    26.4.4访问寄存器
    26.4.5断点
    26.4.6跟踪执行
    26.4.7观察栈和栈回溯
    26.4.8汇编和反汇编
    26.4.9源代码级调试
    26.4.10EnC
    26.4.11文件管理
    26.4.12接收和显示调试信息
    26.4.13转储
    26.5分类标准
    26.5.1特权级别
    26.5.2操作系统
    26.5.3执行方式
    26.5.4处理器架构
    26.5.5编程语言688
    26.6实现模型
    26.6.1进程内调试模型
    26.6.2进程外调试模型
    26.6.3混合调试模型
    26.6.4内核调试模型
    26.7经典架构
    26.7.1基本单元
    26.7.2远程调试
    26.7.3多语言和多处理器架构调试
    26.8HPD标准
    26.8.1HPD标准简介
    26.8.2动作点
    26.8.3进程和线程的表示和命名
    26.8.4命令
    26.9本章总结
    参考资料
    第27章VsDebug
    27.1架构和调试模型
    27.1.1架构概览
    27.1.2远程调试器
    27.1.3本地调试器
    27.2VS调试引擎
    27.2.1一套接口,多种实现
    27.2.2核心类
    27.3工作过程
    27.3.1开始调试32位本地程序
    27.3.2开始调试64位本地程序
    27.3.3访问调试目标
    27.4使用断点
    27.4.1根据名称设置断点
    27.4.2数据断点
    27.4.3附加条件
    27.4.4附加操作
    27.5多线程调试
    27.5.1并行栈回溯
    27.5.2并行监视
    27.5.3冻结线程
    27.6EnC
    27.6.1应用过程
    27.6.2要求/ZI编译选项
    27.6.3下次调用生效
    27.6.4应用失败
    27.7设计期调试
    27.8使用符号服务器
    27.9定制调试事件
    27.9.1初始断点
    27.9.2异常设置
    27.10本章总结
    参考资料
    第28章VSCode的调试扩展
    28.1简介
    28.2四大技术
    28.3理解“扩展包”
    28.3.1包类型
    28.3.2安装
    28.3.3工作原理
    28.4扩展包API
    28.4.1贡献点
    28.4.2命令
    28.4.3激活事件
    28.5调试模型
    28.5.1贡献调试器
    28.5.2宏观架构
    28.6调试适配器
    28.6.1DA描述符工厂
    28.6.2进程内DA
    28.6.3vsdbg
    28.6.4OpenDebugAD7
    28.7机器接口
    28.7.1启用用法
    28.7.2对话示例
    28.7.3MIEngine
    28.8调试Python程序
    28.8.1PTVSD
    28.8.2发起异常时中断
    28.9本章总结
    参考资料
    第29章WinDBG及其实现
    29.1WinDBG溯源
    29.1.1KD和NTSD诞生
    29.1.2WinDBG诞生
    29.1.3发行方式
    29.1.4版本历史
    29.2C阶段的架构
    29.2.1功能模块
    29.2.2远程调试
    29.3重构
    29.3.1版本历史
    29.3.2界面变化
    29.3.3模块变化
    29.3.4发布方式和NTSD问题
    29.3.5文件
    29.4调试器引擎的架构
    29.4.1概览
    29.4.2对外接口
    29.4.3DebugClient类
    29.4.4中间层
    29.4.5服务层
    29.4.6传输和连接层
    29.5调试目标
    29.5.1TargetInfo类
    29.5.2用户态目标
    29.5.3内核态目标
    29.5.4转储文件目标
    29.6调试会话
    29.6.1建立调试会话
    29.6.2调试循环
    29.6.3等待和处理调试事件
    29.6.4继续调试事件
    29.6.5结束调试会话
    29.7接收和处理命令
    29.7.1调试器的两种工作状态
    29.7.2进入命令状态
    29.7.3执行命令
    29.7.4结束命令状态
    29.8扩展命令的工作原理
    29.9本章总结
    参考资料
    第30章WinDBG用法详解
    30.1工作空间
    30.2命令概览
    30.2.1标准命令
    30.2.2元命令
    30.2.3扩展命令
    30.3用户界面
    30.3.1窗口概览
    30.3.2命令窗口和命令提示符
    30.4输入和执行命令
    30.4.1要点
    30.4.2表达式
    30.4.3伪寄存器
    30.4.4别名
    30.4.5循环和条件执行
    30.4.6进程限定符和线程限定符
    30.4.7记录到文件
    30.5建立调试会话
    30.5.1附加到已经运行的进程
    30.5.2创建并调试新的进程
    30.5.3非入侵式调试
    30.5.4双机内核调试
    30.5.5本地内核调试
    30.5.6调试转储文件
    30.5.7远程调试
    30.6终止调试会话
    30.6.1停止调试
    30.6.2分离调试目标
    30.6.3抛弃被调试进程
    30.6.4终止被调试进程
    30.6.5调试器终止或僵死
    30.6.6重新开始调试
    30.7理解上下文
    30.7.1登录会话上下文
    30.7.2进程上下文
    30.7.3寄存器上下文
    30.7.4局部(变量)上下文
    30.8调试符号
    30.8.1重要意义
    30.8.2符号搜索路径
    30.8.3符号服务器
    30.8.4加载符号文件
    30.8.5观察模块信息
    30.8.6检查符号
    30.8.7搜索符号
    30.8.8设置符号选项
    30.8.9加载不严格匹配的符号文件
    30.9事件处理
    30.9.1调试事件与异常的关系
    30.9.2两轮机会
    30.9.3定制事件处理方式
    30.9.4GH和GN命令
    30.9.5实验
    30.10控制调试目标
    30.10.1初始断点
    30.10.2俘获调试目标
    30.10.3继续运行
    30.11单步执行
    30.11.1概览
    30.11.2单步执行到指定地址
    30.11.3单步执行到下一个函数调用
    30.11.4单步执行到下一分支
    30.11.5追踪并监视
    30.11.6程序指针飞跃
    30.11.7归纳
    30.12使用断点
    30.12.1软件断点
    30.12.2硬件断点
    30.12.3条件断点
    30.12.4地址表达方法
    30.12.5设置针对线程的断点
    30.12.6管理断点
    30.13控制进程和线程
    30.13.1MulThrds程序
    30.13.2控制线程执行824
    30.13.3多进程调试
    30.14观察栈
    30.14.1显示栈回溯
    30.14.2观察栈变量
    30.15分析内存
    30.15.1显示内存区域
    30.15.2显示字符串
    30.15.3显示数据类型
    30.15.4搜索内存
    30.15.5修改内存
    30.15.6使用物理内存地址
    30.15.7观察内存属性
    30.16遍历链表
    30.16.1结构定义
    30.16.2双向链表示例
    30.16.3单向链表示例
    30.16.4dl命令
    30.16.5!list命令
    30.17调用目标程序的函数
    30.17.1调用示例
    30.17.2工作原理
    30.17.3条件和常见错误.
    30.18命令程序
    30.18.1流程控制符号
    30.18.2变量
    30.18.3命令程序示例
    30.18.4执行命令程序
    30.19本章总结
    参考资料
    附录A示例程序列表
    附录BWinDBG标准命令列表
    附录CNT内核部件缩写列表
    持之若痴——代跋

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购