Stamp of Software Debugging
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
navigation bar seprate line
内容简介

虽然本书的重点不是编程语言和如何编写代码,但是为了不流于空泛,我们还是给出了大量的代码实例。这些实例可以分为如下几类:

  • 用于演示相关调试技术的工作原理和实现方法,比如软件断点、硬件断点等。
  • 充当被调试目标的靶子程序。
  • 用来模拟各种错误的反例。
为本书开发的工具程序在工具栏目中有详细介绍和下载。

编译方法

所有示例程序都是使用C/C++语言编写的。大多数程序都可以使用Visual C++ 6.0编译器编译。个别程序需要使用Visual Studio 2005编译。如果程序的项目文件是以DSW/DSP为后缀的,那么便是VC6的项目文件。如果是SLN或PROJ后缀,那么便需要Visual Studio 2005或者2008。 如果您在编译这些程序时遇到困难,那么请先到问答栏目寻找是否已经存在有关的问答,如果没有那么请通过意见反馈栏目中给出的方式给我们联系。

目录结构

所有示例程序是按照右图所示的目录结构来存放的。BIN目录用来存放编译出的可执行文件和符号文件。源程序文件和项目文件保存在每一章的子目录中。编译时产生的临时文件统一放在与BIN目录并行的TEMP目录(没有画出,会自动创建)中。

下载

首先,以下程序都是与《软件调试》一书中的内容密切相关的,因此您应该在阅读书中内容后按照书中的指导使用这些程序。在任何情况下,作者不对因为使用以下程序而导致的任何直接和间接后果承担任何责任。

第二,您合法阅读和使用以下压缩包中的源程序文件和二进制文件的前提条件是您购买了《软件调试》一书。

  • 示例程序的源程序文件和项目文件(2,365KB):swdbgbk_src.zip
  • 示例程序的可执行文件和PDB文件(11,825KB):swdbgbk_bin.zip
  • 试验使用的转储文件和有关程序文件(157KB):swdbgbk_dmp.zip

程序清单

在《软件调试》的附录A中列出了示例程序的清单,其中也包括了为本书开发的部分工具(见工具栏目)。

程序名称

用途

正文

Err2Fail.exe

演示在特定条件下才表现出来的错误

1.6.1

AccKernel.exe

从用户空间访问内核空间

2.5.2

AcsVio.exe

写代码段导致非法访问异常

2.5

ProtSeg.exe

应用程序加载无效段寄存器导致异常

2.5

Fault.exe

使用结构化异常器处理除零异常后恢复程序运行

3.3.3

B2BStep.exe

分支到分支单步执行

4.3.4

HiInt3.exe

在代码中插入断点指令

4.1.1

DataBP.exe

手工设置数据断点

4.2.8

TryInt1.exe

在用户态代码中插入INT 1指令会违反保护规则

4.3.1

CpuWhere.exe

使用CPU的调试存储机制记录CPU的执行路线

5.4

Bts.sys

支持CpuWhere的驱动程序

5.4

LBR.dll

使用分支记录功能的WinDBG扩展模块

5.2.3

McaViewer.exe

读取MCA寄存器

6.3.2

Breakout.exe

试验应用程序自己调用DbgUiRemoteBreakin的效果

10.6.4

DebString

用于验证OutputDebugString API的工作原理

10.7

EvtFilter.exe

用于试验VC调试器的异常处理选项

10.5.5

HungWnd.exe

用于观察被中断到调试器后的程序窗口

10.6.9

MiniDbgee.exe

用作调试目标的简单Win32程序

10.4.2

TinyDbge.exe

用作调试目标的简单控制台程序

10.4.2

TinyDbgr.exe

使用调试API编写的简单调试器

10.4.2

SEH_Excp.exe

探索SEH的异常处理

11.4.3

SEH_Trmt.exe

探索SEH的终结处理

11.4.2

SEH_Mix.exe

嵌套使用SEH的异常处理和终结处理

11.4.6

VEH.exe

演示向量化异常处理器的用法

11.5.3

JitDbgr.exe

一个简单的JIT调试器

12.5.3

UdmpView.exe

读取和解析用户态转储文件

12.9.4

UEF.exe

触发未处理异常的控制台程序

12.1

UefWin32.exe

触发未处理异常的窗口程序

12.1

UefSndThrd.exe

在第2个线程总触发未处理异常的控制台程序

12.1

UefSrvc.exe

触发未处理异常的系统服务程序

12.1

UefCSharp.exe

触发未处理异常的.Net程序

12.1

UefSilent.exe

不显示应用程序错误对话框

12.4

ErrorMode.exe

观察SetErrorMode API的效果

13.6.1

HiCLFS.exe

使用CLFS API创建日志文件和读写日志记录

15.6

Crimson.exe

演示Crimson API的用法

16.9

ETW.exe

演示使用编程方法控制NT Kernel Logger

16.7.2

RawLog.exe

不使用清单文件而直接输出日志信息

16.9

KdTalker.exe

与内核调试引擎的对话程序

18.5.7

Verifiee.exe

探索程序验证器的分析目标

19.4.1

AllcStk.exe

演示栈的创建过程和栈溢出

22.2.3

BoAttack.exe

缓冲区溢出攻击的基本原理

22.10.2

BufOvr.exe

存在缓冲区溢出错误的小程序

22.10.1

CallConv.exe

包含各种函数调用协议的小程序

22.7

CallCV64.exe

演示64位系统下的函数调用协议

22.7.6

CheckESP.exe

不遵守栈平衡原则的小程序

22.6

HiStack.exe

用于观察栈的小程序

22.3.3

LocalVar.exe

用于观察局部变量的小程序

22.4.1

SecChk.exe

演示编译器的安全检查功能

22.11

StackChk.exe

演示栈检查函数的工作原理

22.8.3

StackOver.exe

通过死循环导致栈溢出的小程序

22.8.2

StkUFlow.exe

存在栈下溢错误的小程序

22.9

MemLeak.exe

使用CRT的调试支持自动转储内存泄漏

23.15

FreCheck.exe

用于分析释放堆块时触发的堆检查

23.8.3

HeapHFC

演示Win32堆的释放检查(HFC)机制

23.6.2

HeapMfc

演示内存泄漏的MFC程序

23.7

HeapOver

演示发生在堆上的缓冲区溢出

23.8

HiHeap.exe

用来分析基本内存分配和释放操作的控制台程序

23.3

SBHeap.exe

使用CRT的小堆块堆

23.11.2

Interop.exe

用于分析在同一个程序中使用两种异常处理机制

24.7

SehComp.exe

用于分析SEH异常处理编译方法的调试目标

24.5.2

SehRaw.exe

手工注册异常处理器

24.4.1

VC8Win32.exe

用于分析异常处理有关的安全问题

24.6

HiWorld.exe

VC2005产生的典型Windows程序

25.4.1

PdbFairy.exe

直接读取PDB文件的小程序

25.6.5

Sig2Time.exe

PDB文件中的时间戳转换为时间

25.8

SymOption.exe

试验不同的符号文件选项

25.2

SymView.exe

符号文件观察器

25.6.8

D4D.dll

演示可调试设计的DLL模块

27.4

D4dTest.exe

使用D4D.dll的测试程序

27.4

PerfView.exe

演示性能监视程序的工作原理

27.5.3

MulThrds.exe

用于演示线程控制命令的调试目标

30.13.1

navigation bar seprate line
Copyright (C) 2008-2013 Raymond Zhang, All Rights Reserved