出版社:电子工业出版社
出版日期:2013-3-1
ISBN:9787121196072
作者:张银奎
页数:461页
作者简介
《格蠹汇编——软件调试案例集锦》以案例形式讨论了使用调试技术解决复杂软件问题的工具和方法。全书共36章,分为四篇。前两篇每章讲述一个有代表性的真实案例,包括从堆里抢救丢失的博客,修复因误杀而瘫痪的系统,徒手战木马,拯救“发疯”的windows7,经典阅读器的经典死锁,拯救挂死的powerpoint,转储分析之双误谜团,是谁动了我的句柄,寻找系统中的“耗电大王”,解救即将被断网的系统,转储分析之系统挂在dpc,sdk安装程序卡壳之谜等。所选案例既有深度,又有较大的广度,从平台角度看有windows、linux和android,从编程语言角度看有c/c++、.net和java,从运行模式看既有内核态,也有用户态,从问题的类型来看,有多种原因导致的崩溃和挂死,也有数据混乱,启动、睡眠或者唤醒失败等。第三篇讨论了调试工具和调试系统的设计方法,包括windows 8中的通过以太网络和usb 3.0进行内核调试的方法,android平台上跨机器调试java应用程序的方法,.net调试模型的缺欠以及clr4重构调试模型的方法,通过amli调试器调试acpi脚本的方法,双机调试特殊进程的方法,以及设计调试设施应该注意的海森伯效应等。第四篇收录了使用调试器探索计算机世界的若干学习笔记,包括在调试器中细品cpu,通过调试器观察和解码堆块结构,透视windows 8的新类型应用以及使用调试器监视启动、睡眠和唤醒三大基本过程等。
《格蠹汇编——软件调试案例集锦》是《软件调试》一书的姊妹篇,延续了《软件调试》的深入严谨风格。但与《软件调试》重在系统介绍调试原理不同,本书重在实践,通过一个个有代表性的真实问题“现身说法”,在软件大背景下介绍调试,通过调试技术解剖软件。本书适合广大程序员、软件测试工程师、软件架构师以及相关专业的高年级学生阅读,也可供信息安全领域的工程师或者研究者参考。
书籍目录
《格蠹汇编——软件调试案例集锦》
笃 行 第 一
第1章 从堆里抢救丢失的博客
3
第2章 修复因误杀而瘫痪的系统
11
第3章 徒手战木马
18
第4章 调试笔记之侦查广告插件
23
第5章 拯救“发疯”的windows 7
30
第6章 再解电源服务溢出崩溃
37
第7章 三解电源服务溢出崩溃
44
第8章 拯救挂死的powerpoint
60
第9章 经典阅读器的经典死锁
71
明 辨 第 二
第10章 转储分析之双误谜团
81
第11章 混乱数据何处来——标准文件流有关的陷阱
98
第12章 解救即将被断网的系统——调试补丁安装失败
108
第13章 sdk安装程序卡壳之谜——兼谈函数的异常出口
123
第14章 是谁动了我的句柄
138
第15章 转储分析之系统挂在dpc
148
第16章 转储分析之探寻唤醒失败原因
156
第17章 解救陷入死循环的msn
169
.第18章 寻找系统中的“耗电大王”
184
器 用 第 三
第19章 windows 8的内核调试增强
195
第20章 漫谈android系统的调试模型
203
第21章 趣谈托管程序的辅助调试线程
227
第22章 漫谈sos扩展
234
第23章 趣谈clr4的调试模型重构
246
第24章 如何跟踪acpi代码
253
第25章 如何调试窗口大总管
263
第26章 嵌入式系统调试浅谈
273
第27章 海森伯效应一例
282
致 知 第 四
第28章 使用调试器来认识计算机世界
293
第29章 在调试器中细品cpu
300
第30章 系统启动系列
320
第31章 在调试器中观察计算机的睡眠过程
358
第32章 在调试器中观察计算机的唤醒过程
380
第33章 使用调试器探索托管程序的执行起点
388
第34章 解读编码后的heap_entry结构
397
第35章 在调试器中看win7打电话回家
404
第36章 使用调试器透视windows 8的metro应用
418
附录a 准备试验环境
443
附录b 设置内核调试环境
445
附录c 面向问题的索引
449
附录d 英文术语索引
451
附录e windbg命令索引
453
附录f 常用的汇编指令(x86)
460
编辑推荐
《格蠹汇编:软件调试案例集锦》是《软件调试》一书的姊妹篇,延续了《软件调试》的深入严谨风格。但与《软件调试》重在系统介绍调试原理不同,《格蠹汇编:软件调试案例集锦》重在实践,通过一个个有代表性的真实问题“现身说法”,在软件大背景下介绍调试,通过调试技术解剖软件。《格蠹汇编:软件调试案例集锦》适合广大程序员、软件测试工程师、软件架构师以及相关专业的高年级学生阅读,也可供信息安全领域的工程师或者研究者参考。
章节摘录
版权页: 插图: 是谁杀了关键服务 简单的方法没能奏效后,我开始思考如何对付这个问题。系统重启的直接原因是关键的系统服务意外终止了(serviceterminated unexpectedly)。因为有些系统服务(service)承担着重要的职责,它们的“健康”关系到整个系统是否能正常运行,所以系统会监视这些服务,如果发现它们意外退出(终止)了,那么便像有国家政要被谋杀了一样,进入紧急状态,强制“戒严”——关闭登录会话,退出窗口系统,强制重启系统……因为有很多个重要服务,比如日志服务、PnP服务、电源服务、DCOM等,都居住(host)在SvcHost进程中,在那里办公,所以一旦这个进程意外终止,那么很多个关键服务都会受影响。从上面描述的现象来看,很可能是SvcHost进程意外终止了,导致运行在这个进程中的系统服务全完了,可谓“城门失火,殃及池鱼”。那么是谁杀了这个重要的服务进程呢? 选择方法 接下来应该选用什么方法来调试呢?我开始评估各种方法。 1.很多进程意外终止是因为未处理异常导致进程被强行终止,即通常说的应用程序崩溃(Application Crash)。对付应用程序崩溃的常用方法是JIT调试,也就是当程序在被终止前,自动启动JIT调试器(参见第4章以及《软件调试》12.5节)。但对于本例,出问题的进程运行在不可见的Session 0中,因此,当JIT调试器被启动后,默认是不可见的。我们必须想办法让JIT调试器可见或者想办法与它通信。 2.第二种方法是使用双机内核调试,也就是通过串行口、1394或者USB 2.0电缆来调试出问题的系统。尽管本例中问题发生在用户态,但是仍可以通过内核方式设置断点,或者等待发生未处理异常时中断到内核调试器,然后进行调试。 3.第三种方法是使用转储文件(dump file),也就是在SvcHost进程崩溃时产生转储文件,然后分析这个转储文件。通常系统的WER机制(参见《软件调试》第14章)会自动产生转储文件,因此只需要找到并复制出来。 比较以上三种方法,第三种相对来说简单一些,但是只能看到崩溃时的“瞬间快照”,前两种方法都需要两台机器,相对来说比较麻烦,但是可以进行交互式调试。 不妨先尝试第三种方法,不行再用其他两种方法(见补记部分)。于是面临的问题便是如何找到转储文件并复制出来。眼下系统反复重启,每次只能使用几秒钟,要在那几秒钟时间内找到转储文件,然后复制出来难度太大了。怎么办呢?Win7的一个新功能刚好可以完美地解决这个问题。 WinRE派用场 很多普通用户可能根本不注意,一个典型的Win7系统中,其实有两个Windows,一个是用户通常使用的,另一个是正常系统出故障时用来紧急恢复用的,后者通常被称为WinRE(Windows Recovery Environment)。简单来说,WinRE是个简化了的Windows,它很小,占用大约200MB的磁盘空间。 如何进入WinRE呢?与进入安全模式的方法是类似的,也就是在高级启动菜单中选择Repair Your Computer。 进入WinRE后,启动一个命令行窗口,然后切换到Win7的系统盘。值得注意的是,WinRE映射的盘符与正常系统中看到的盘符很可能是不一样的,C盘一般是所谓的系统保留分区,D盘一般是Win7的系统盘,可以通过文件来确定。在本例中,D盘是Win7的系统盘,于是切换到D盘后,执行dir*.mdmp/s以下命令来寻找WER机制产生的转储文件。