Stamp of Software Debugging
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
navigation bar seprate line
监视CPU执行轨迹的CpuWhere

除了使用寄存器来记录分支信息的LBR机制,IA-32 CPU还支持使用内存来记录分支信息,通常被称为Branch TraceStore,简称BTS。 

CpuWhere工具用来演示IA-32CPU的BTS功能,可以启用BTS功能,开辟内存区域记录CPU的分支记录,然后以符号形式显示在GUI界面中。

 

上图显示的是CpuWhere的一个工作场景。左侧的编辑框用来配置BTS缓冲区可以存放的分支记录数,这个数值越大,需要的内存缓冲区也就越大。左侧的按钮用来执行各种动作,依次为:

Load - 加载驱动程序;

Start Recording - 开始分支记录;

Stop Recording - 停止分支记录;

Fetch Records - 获取分支记录;

Symbol Path - 设置符号路径;

Reload Symbol - 调用调试引擎的接口,重新加载调试符号;

Clear - 清除右侧列表框的所有内容;

Copy Sel - 复制右侧列表框中选中的内容;

Copy All - 复制右侧列表中的所有信息;

Unload - 卸载驱动程序;

Quit - 退出程序。

安装方法

第一步:CpuWhere由一个用户态应用程序CpuWhere.exe和一个内核态驱动程序cpuwhere.sys组成。通过下面的链接下载压缩包后,请先将其中的文件解压缩到你喜欢的位置,然后将驱动程序复制到Windows的驱动程序目录中,通常为c:\windows\system32\drivers\。 

第二步:因为此工具需要使用WinDBG的调试器引擎来解析符号,所以应该先在您的系统中安装WinDBG,否则将只能看到二进制的分支信息。如果还没有安装WinDBG,那么可以通过下面的链接去下载WinDBG的安装包:
下载和安装WinDBG

第三步:为了能够顺利编译WinDBG的头文件,编译这个工具时使用Visual Studio 2005,所以这个工具依赖于VC2005的运行时DLL,如果你的机器上安装过Visual Studio 2005,或者安装过VC2005运行时,那么不需要再安装,否则请通过下面的链接下载并安装。
安装VC2005运行时

注意事项

此工具只能工作在支持BTS功能的IA-32 CPU上,在其它CPU上会无法工作,而且可能出现异常。

这个工具包含驱动程序,可能导致系统崩溃,甚至硬件一级的损坏,建议您只在测试系统上运行这个工具,并且事先做好备份。作者不对使用这个工具导致的任何直接和间接结果负责,参见以下页面中的免责声明:http://advdbg.org/books/swdbg/tools.aspx

内部实现

《软件调试》的第5章专门讨论了IA-32 CPU的分支记录功能,特别是5.3节讨论了使用内存的分支记录,CpuWhere工具就是《软件调试》的作者在写作这些内容时开发的。因此,请阅读《软件调试》的有关章节来理解CpuWhere工具的设计背景和更多信息,包括启动本地内核调试的细节、这个工具的局限性和扩展建议。

使用许可

这个工具不具有实用价值,只是为了演示CPU的分支记录功能。开放这个工具的目的是方便《软件调试》的读者理解该书第5章的内容。下载并使用这个工具的许可条件是使用者本人购买了《软件调试》一书。

下载

包含CpuWhere.exe和CpuWhere.sys的压缩包(18KB)cpuw_bin.zip

包含应用程序和驱动程序源代码的源程序压缩包(225KB)cpuw_src.zip(需要免费注册才能下载)

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