搭建Win7调试ACPI的环境

来源:互联网 发布:其恕乎的其是什么意思 编辑:程序博客网 时间:2024/04/28 00:22

    这几天看<格蠹汇编>中调试ACPI相关章节,里面提到为了使用AMLI调试器,需要检查版本(Checked Build)的ACPI.sys。

    我们平时使用的windows都是发行版本(Free Build),因此不能满足我们调试的需求。MSDN相关文档提到2个获得checked build的方法:1).从winddk的根目录下Debug/目录获取。很可惜,这个目录中只有ntkrnl.exe/hal.dll等文件,并没有acpi.sys;2).从MSDN Subscriber下载Checked Build OS。这需要Subscriber账号并订阅。说白了,人民币玩家才能从这下载到Checked Build OS。两种方式都行不通,只能通过baidu了。baidu上多数是调试Xp sp2的ACPI.sys,不幸的事,它们提供的指向微软下载中心的Checked Build补丁包都已经失效(被MS移除)。最终,我找到了win7 RTM x86 Checked build ACPI.sys。为了方便网友调试ACPI,我顺带给出了它的下载链接。

    有了Checked Build ACPI.sys后,还需要与之对应的OS:en_windows_7_ultimate_x86_dvd_X15-65921.iso 可以从MSitellyou上获得对应的镜像。万事具备都就可以准备替换Acpi.sys。Vist以前的系统进入安全模式后就能替换,对于Vist以后的OS,以管理员身份运行下列命令,再替换(不需要进入安全模式):

takeown /f acpi.syscacls acpi.sys /G <username>:F ;username是当前用户的用户名 F是指获得所有权限
    重启OS连上windbg后,设置符号路径(MS下载中心win 7RTM x86调试符号包无法下载,所以只能在windbg中设置符号路径):
SRV*http://msdl.microsoft.com/download/symbols
    之后就可以开始调试ACPI了:

kd> lm m acpistart    end        module name88e18000 88e8d000   ACPI       (pdb symbols)          c:\symbols\w7rtmx86\acpi.pdb\D653AC015F2D49A68DD1DE36261E05661\acpi.pdbkd> lmvm acpistart    end        module name88e18000 88e8d000   ACPI       (pdb symbols)          c:\symbols\w7rtmx86\acpi.pdb\D653AC015F2D49A68DD1DE36261E05661\acpi.pdb    Loaded symbol image file: ACPI.sys    Image path: ACPI.sys    Image name: ACPI.sys    Timestamp:        Tue Jul 14 07:34:34 2009 (4A5BC48A)    CheckSum:         0007627F    ImageSize:        00075000    Translations:     0000.04b0 0000.04e4 0409.04b0 0409.04e4

kd> !amli debugger ;使windbg与ACPI调试器建立链接kd> !amli dns ;查询ACPI命名空间的对象ACPI Name Space: \ (ffffffff84f59024)Unknown(\___)| Unknown(_GPE)| | Method(_L09:Flags=0x0,CodeBuff=ffffffff84f5f1f5,Len=222)| | Method(_L01:Flags=0x0,CodeBuff=ffffffff858c71b9,Len=15)| | Method(_L02:Flags=0x0,CodeBuff=ffffffff858c7c81,Len=10)| | Method(_L03:Flags=0x0,CodeBuff=ffffffff858c7cf5,Len=10)| Unknown(_PR_)| Unknown(_SB_)| | Method(STRC:Flags=0x2,CodeBuff=ffffffff84f59541,Len=73)| | OpRegion(OEMD:RegionSpace=SystemMemory,Offset=0x8b18de5d,Len=96)| | Field(:Base=)| | FieldUnit(:FieldParent=ffffffff84f59650,ByteOffset=0x0,StartBit=0x0,NumBits=288,FieldFlags=0x0)| | FieldUnit(CCAP:FieldParent=ffffffff84f59650,ByteOffset=0x24,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(ECFG:FieldParent=ffffffff84f59650,ByteOffset=0x28,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(PCHS:FieldParent=ffffffff84f59650,ByteOffset=0x2c,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(PCHE:FieldParent=ffffffff84f59650,ByteOffset=0x30,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(VMGC:FieldParent=ffffffff84f59650,ByteOffset=0x34,StartBit=0x0,NumBits=256,FieldFlags=0x0)| | FieldUnit(LDDV:FieldParent=ffffffff84f59650,ByteOffset=0x54,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(POSC:FieldParent=ffffffff84f59650,ByteOffset=0x58,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | FieldUnit(SIOC:FieldParent=ffffffff84f59650,ByteOffset=0x5c,StartBit=0x0,NumBits=32,FieldFlags=0x0)| | Integer(TOOS:Value=0x0000000000000c00[3072])| | Integer(FLAG:Value=0x0000000000000001[1])| | Method(_INI:Flags=0x0,CodeBuff=ffffffff84f59b3d,Len=569)



0 0
原创粉丝点击