张银奎所著的《格蠹汇编——软件调试案例集锦》讲了很多关于软件的故事,有好软件,也有坏软件。无论好坏,它们都只是一个缩影,旨在反映软件成长的真实历程。
《格蠹汇编——软件调试案例集锦》努力以故事形式讲技术,在故事中领会软件;以人文情怀写软件,在软件中省察人性。以游记方式探索软件这个“太虚幻境”,用故事语言把原本枯燥的二进制世界变得生动有趣。
这本书是讲调试的,是《软件调试》的姊妹篇,通过一个个有代表性的真实问题“现身说法”。如果你觉得《软件调试》有些太烈,不容易入口,那么这本书可以充当下酒的小菜。
这本书又不完全是讲调试的,调试是手段,但却不是目的。本书的写作原则是在软件大背景下介绍调试,通过调试技术解剖软件。宗旨是让读者学会使用调试器这把利剑深刻认识软件,自由驾驭软件。
张银奎所著的《格蠹汇编——软件调试案例集锦》以案例形式讨论了使用调试技术解决复杂软件问题的工具和方法。全书共36章,分为四篇。前两篇每章讲述一个有代表性的真实案例,包括从堆里抢救丢失的博客,修复因误杀而瘫痪的系统,徒手战木马,拯救“发疯”的Windows 7,经典阅读器的经典死锁,拯救挂死的PowerPoint,转储分析之双误谜团,是谁动了我的句柄,寻找系统中的“耗电大王”,解救即将被断网的系统,转储分析之系统挂在DPC,SDK安装程序卡壳之谜等。所选案例既有深度,又有较大的广度,从平台角度看有Windows、Linux和Android,从编程语言角度看有C/C++、.NET和Java,从运行模式看既有内核态,也有用户态,从问题的类型来看,有多种原因导致的崩溃和挂死,也有数据混乱,启动、睡眠或者唤醒失败等。第三篇讨论了调试工具和调试系统的设计方法,包括Windows 8中的通过以太网络和USB 3.0进行内核调试的方法,Android平台上跨机器调试Java应用程序的方法,.Net调试模型的缺欠以及CLR 4重构调试模型的方法,通过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