调试ACPI BIOS与调试标准的内核代码有很大的不同。普通的驱动程序都是由某一特定的CPU的机器码组成,而ACPI BIOS不是。ACPI BIOS是以ACPI机器语言(AML)的形式储存在BIOS芯片中,操作系统加载时被调入内存,由AML解释器解释执行。微软提供了一个调试工具来调试AML代码——Microsoft AMLI Debugger。这个工具并不是一个独立的程序,它由两部分组成:一部分存在于Checked版的ACPI驱动ACPI.sys中,另外一部分则包含在调试工具WinDbg中。为了使用完整的AMLI Debugger功能,您必须要安装Checked版的ACPI.sys到Debuggee上。
自从Windows 9x/Me以来,所有的Windows版本中都存在AMLI Debugger。对于Windows XP及其后的版本中所带的AMLI Debugger可以完全处理64位CPU,所以不管你的Debuggee和Debugger上的CPU是32还是64位的,都不会出现问题。
为了安装checked版的ACPI.sys,您可以在Debuggee上安装一个完整的Checked版的操作系统,也可以单独安装ACPI.sys一个文件,其它模块都使用Free版的。后一种方法有以下优点:1、可以得到想要的Debug功能,而且不会被其它模块所干扰。2、简单。下面就来讲一下具体怎么做。
一、首先你必须到微软网站上下载与你Debuggee上安装的操作系统版本一致的Checked版本,这是免费的,2K及Xp sp1:http://www.microsoft.com/whdc/DevTools/tools/chkblds.mspx,XP sp2:http://download.microsoft.com/download/e/c/6/ec6e00ab-ec05-4673-b8db-0658cf65f043/WindowsXP-KB835935-SP2-DEBUG-ENU.exe。
二、假设使用的是Xpsp2,使用Winrar或别的解压缩软件将/i386/ACPI.sy_解出来。由于该文件扩展名以下划线结尾,表示它是一个压缩文件,需要使用节压缩工具(%SystemRoot%/system32/expand.exe)展开。比如,你可以在命令行提示符下输入:> expand Acpi.sy_ Acpi.sys。
三、进入安全模式,将展开的ACPI.sys覆盖%SystemRoot%/system32/drivers/acpi.sys。提醒你要记得要把原有Free版做备份J。
到现在,debuggee上的Checked版的Acpi.sys算是安装完成了,但为了能使用AMLI Debugger,还有一个工作不得不作。在我写的关于使用WinDbg调试ACPI的文章中说过,Debugger上的Symbol版本需要和Debuggee上的操作系统的版本一致,否则WinDbg不能正常使用。为此,还需要下载对应的Checked版的Symbol,将其中的ACPI.pdb.sys更名为acpi.pdb,替换Free版symbol的sys/acpi.pdb。[完]