最经遇到很多BSOD的问题,不免要学一下windebug的方法。

主要步骤如下:

在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理。 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger)。下面就介绍一下怎么在两台机器上建立调试环境。

1、配置调试Debuggee的连接方式

Windbg支持COM、1394、USB2.0三种不同的连接方式,看到网上有些文章关于使用USB2.0来连接,需要购买特殊的USB调试线,而且价格不菲,本篇文章就不讨论了。笔记本电脑一般都没有COM端口,只好使用1394或是COM转USB,但在这里我只想讨论怎么使用COM端口来连接。

启动到操作系统,使用bootcfg命令或直接使用文本编辑器修改boot.ini文件,指定调试使用的端口及参数。为了使用COM端口来调试,需要在启动参数中加入/debug参数,并指定/debugport和/baudrate子参数来作为启动项。下面这个boot.ini文件的第一个启动项就是配置使用COM端口。/debugport子参数指出使用Debuggee的哪个COM口,/baudrate指出连接的速度(默认是每秒19200位)。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600
multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /fastdetect

下面的例子使用bootcfg命令设置第一个启动项使用COM1端口、波特率为115200。bootcfg的/debug开关打开,/port开关及/baud参数指出端口和速度,/ID开关指出修改的是第一个启动项。

bootcfg /debug ON /port COM1 /baud 115200 /ID 1

2、建立AML调试环境

AML调试器被包含在checked版(调试版)的acpi.sys中,为了完全使用AML调试器,这个驱动必须要安装在目标机上。尽管Free版(正式版)的acpi.sys支持一部分的AMLI debugger扩展命令,但它并没有包含AMLI debugger。

如果你的目标机上已经安装Windows的checked版,运行的就是checked版的acpi.sys。如果安装的是free版的Windows,你可以选择重新安装一个完整的checked版或选择只安装checked版的acpi.sys。(肯定是后一种方式方便啊J),我会在另外一篇文章中讲讲怎么在free版的Windows中安装checked版的acpi.sys。

3、下载安装Windbg

Windbg在微软网站上有免费下载,http://www.microsoft.com/whdc/devtools/debugging/default.mspx,现在的版本是6.6.7.5。安装它没有什么特别之处,如果你曾经在别的机器上安装过,直接拷贝到你现在的机器上也能用。看到某些帖子说最好安装路径上不要有空格,可能会出问题,但我一直没碰到过。

4、主机端符号(Symbol)文件路径配置

首先,什么是symbol文件呢?Symbol文件包含了很多调试DLL、EXE文件的时候需要的数据,但它们在程序运行的时候没什么用。通俗的说,Symbol File是包含了相关二进制文件(EXE,DLL)调试信息的一种文件,它以.pdb为扩展名。比如Windows XP下有一个GDI32.dll,那么微软在编译该DLL的时候会产生一个GDI32.pdb文件,程序员有了这个PDB文件,愿意的话就可以用它来调试,跟踪到GDI32.dll的内部去!一般来说,symbol文件包含一下内容:

a.全局变量(Global variables)
    b.局部变量(Local variables)
    c.函数名和它们的入口地址(Function names and the addresses of their entry points)
    d.FPO data(frame pointer omission),frame pointer是一种用来在调用堆栈(Call stack)中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-line numbers)

该文件和二进制文件的编译版本密切相关,比如你修改了DLL的输出函数等,再编译该DLL那么原先的PDB文件就过时了,不能再胜任调试的重担了,这时候你需要的是修改后编译产生的PDB文件。所以,主机端使用的Symbol文件一定要和目标机上安装的操作系统的版本要一致。

Symbol文件对于Windbg来说是至关重要的,如果找不到正确的Symbol文件,调试功能就没法使用。Windows的Symbol文件可以在微软网站上免费下载,http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx。可我不建议您这么做,因为不管是Checked版的还是Free版的Symbol都有近200M,下载过程相当痛苦。好在微软提供了Symbol服务器,使得Windbg可以自己在上面查找需要的模块。具体配置方法是:File-〉Symbol File Path…弹出符号文件对话框,输入:        SRV*C:/Symbols*http://msdl.microsoft.com/download/symbols,“C:/Symbols”可以是本地人一路径,用来保存下载的符号文件。

5、联机开始调试

A、启动目标机,当启动到启动菜单的时候,移动方向键,结束倒数计时,使它停在这个地方。

B、在主机上打开Windbg,File-〉kernel Debug,选择相应的连接方式,如果使用COM端口的话,在对话框中填写主机使用的COM端口以及所选择的波特率,波特率需要和目标机上的设置相同。

点击OK就大功告成了,尝试使用!amli debugger命令启动AMLI调试器,如果没什么动静,这就算成功了。开始调试你的ACPI代码吧

对于较小概率去追这个过程实在是在长了,想要抓到低概率事件确实不容易。丢一个开机过程得20-30分钟。

微软分析方法目前看到的是两种:

1.获取蓝屏时的设备

2.有时候指向多个设备,可以尝试指向具体的ASL code.基本的command是 !amli lc。查看上下文,找出Flash标志为R的,然后指向具体的设备。

:kd> !amli lc

Ctxt=ffffffffebc3a008,ThID=0000000000000000, Flgs=A--C-----, pbOp=ffffffff9020968e,Obj=\_SB.PCI0.LPEA._PS0

Ctxt=ffffffffca1dd800,ThID=0000000000000000, Flgs=A--C-----, pbOp=0000000000000000,Obj=\_SB.PCI0.PNIT._STA

Ctxt=ffffffff8ed771b8,ThID=0000000000000000, Flgs=A--C-----, pbOp=0000000000000000,Obj=\_SB.PCI0.SDHB._STA

Ctxt=ffffffff9c857008,ThID=0000000000000000, Flgs=A--C-----, pbOp=0000000000000000,Obj=\_SB.BTNS._STA

Ctxt=ffffffffbf630088,ThID=0000000000000000, Flgs=A--C-----, pbOp=0000000000000000,Obj=\_SB.PCI0.I2C6.TCSE._STA

Ctxt=ffffffffebdf6438,ThID=ffffffff8c607ac0, Flgs=---CR----, pbOp=ffffffff9024654a

如何使用windebug追踪ASL CODE相关推荐

  1. 通过Windbg来追踪ASL code的运行

    通过Windbg来追踪ASL code的运行: 目标机的配置: 第一步: 在BIOS Setup下面 disable secure boot(不然下面debug on 命令会失败):关闭防火墙. 第二 ...

  2. windbg调试ACPI ASL Code 实例一则

    准备工作:搭建ACPI调试环境请移步至:<搭建Win7调试ACPI的环境>里面有Checked Build ACPI.sys 本文中OS为Win7 x86(镜像:en_windows_7_ ...

  3. ASL code基本操作

    一.ASL基本准则 1.变量命名不超过四个字符,且不能以数字开头. 2.变量或者函数命名,不分大小写. 3.Scope形成作用域,概念类似于C++中的namespace,Java中的package. ...

  4. ASL Code中的_DSM方法

    一.HID I2C设备的"_DSM"方法 _DSM方法一共有4个参数,分别为Arg0.Arg1.Arg2.Arg3.该方法的具体定义以及每个参数的含义请参看ACPI 5.0规范的9 ...

  5. 二维码QR Code不是一个产品,是一个功能

    2019独角兽企业重金招聘Python工程师标准>>> 台湾有许多公司,开始跨入 QR Code 的相关应用,热度开始逐渐上升.最近有幸跟许多在这方面有兴趣的朋友们聊天,得到了很多的 ...

  6. python字节码执行函数_做一个字节码追踪器,从内部理解 Python 的执行过程

    最近我在研究 Python 的执行模型.我对 Python 内部的东西挺好奇,比如:类似 YIELDVALUE 和 YIELDFROM 此类操作码的实现:列表表达式.生成器表达式以及一些有趣的Pyth ...

  7. ACPI基础——ASL语言

    https://blog.csdn.net/jiangwei0512/article/details/54851544 ACPI Source Language 的缩写 ASL是一种源语言,用来定义A ...

  8. ACPI知识学习笔记

    ACPI table之FACP(Fixed ACPI Description Table). 在代码里面:Resources\AcpiTables\Fadt\Fadt3.0.act 定义了EFI_AC ...

  9. BIOS工程师需要掌握的知识

    ACPI规范: ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)_anqi8955的专栏-CSDN博客 ​​​​​​ACPI Specification 第一章 ...

最新文章

  1. 不应该在ToString()方法中修改引用类型
  2. Mac终端(Terminal)自定义颜色,字体,背景
  3. 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题
  4. 安卓 图像清晰度识别_OCR文字识别的功能及注意事项
  5. 《中国文化要略》第八章 古代教育 第九章 科举制度
  6. VS2012下基于Glut 矩阵变换示例程序2:
  7. Flink 新一代流计算和容错——阶段总结和展望
  8. java实现:判断是否是素数
  9. 怎样在计算机上注册dll文件,win10如何注册dll文件_win10系统dll文件怎样安装
  10. conda环境下更新pip失败
  11. 大数据与云计算——Vmware虚拟化技术原理
  12. geth 搭建 私有链节点
  13. XML考试题库大全(附答案)
  14. 埃拉托色尼筛法(素数筛)
  15. 新星计划·能够 120% 提升博文美感的表情包,你们确定不心动吗?
  16. Exemplar-based image inpainting(+code)
  17. 单招计算机Windows7知识点,计算机单招考试试题
  18. 从菜鸟教程网站(www.runoob.com)抓取所有教程
  19. 30种“行之有效”的用WordPress在线博客赚钱的方法
  20. 一个IT老兵六年的折腾之路!

热门文章

  1. 网站漏洞挖掘测试服务
  2. 微积分7---极坐标确定切线方程
  3. 一种细菌菌落计数与分类系统(图像处理部分在matlab上实现)——(1)R,G,B,S将图像分为彩色和消色差图像
  4. java parcelable_Parcelable最强解析
  5. IPV4子网掩码对应表
  6. 鸿蒙系统做个电视,装有鸿蒙系统的电视怎么看直播?本文做出最详细的解答
  7. 怎么测试t470p性能软件,ThinkPad T470p 助力耐热极限测试圆满完成
  8. 新一代私有云来了!看透基于开源生态的产品化
  9. 看看华为、阿里大数据架构师的必备技能!
  10. 圣斗士星矢游戏抽奖计算机怎么计算,圣斗士星矢手游抽奖概率是多少 抽奖概率公布[多图]...