如何使用WinDBG跟踪调试ASL/ACPI?

Tracking ACPI/ASL Using WinDbg Tracking ACPI/ASL Using WinDbg 1. Preface       ACPI是BIOS和OS之间沟通的主要手段,所以有些系统相关的问题,都跟ACPI asl code有很大的关系,如果能够直Debug ACPI asl code那将会对解决这类问题提供很好的帮助。这篇文章的目的就是讲解如何使用WinDbg实现ACPI/ASL code源码级别的调试。   阅读详情

 

在现代计算机中,硬件和固件(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代码吧

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/EFIBIOS/archive/2007/03/12/1526763.aspx

请叫我鱼拆,2024扫地机器人的第一次拆机 从背面可以看出,这个机器人是两轮差速模型,两个驱动轮,一个万向轮,驱动轮位于机器人中心位置,这样原地旋转的圆心就是机器人的中心。可以看到设备已经连接,但是没有办法进shell,厂家应该有做了安全保护之类的,有知道从这个口可以登录系统办法的小伙伴可以后台留言。但这台机器人一直报警说,机器人轮子离地,小鱼 估计是防跌落模块有问题,误触发了,所以打算先拆机看看。接着小鱼试了下,机器可以开机,然后给他重新配置wifi,连上 米家。Allwinner,全志的片子,不知道哪个型号的,看产品id,应该支持adb。 阅读详情

相关推荐

大白映射 宝马Esys编程设码映射、USB设备映射

大白映射,宝马Esys设码编程、USB设备映射

denson0394的博客 4739

windbg调试ACPI ASL Code 实例一则

准备工作:搭建ACPI调试环境请移步至:《搭建Win7调试ACPI的环境》里面有Checked Build ACPI.sys 本文中OS为Win7 x86(镜像:en_windows_7_ultimate_x86_dvd_X15-65921.iso) kd> vertarget ;记得OS一定要和ACPI.sys匹配,否则替换ACPI后OS可能无法启动。 ;我的OS版本信息如下 Wi...

lixiangminghate的专栏 4496

《AI智能体技术 》全套PPT课件2026

《AI智能体技术 》全套PPT课件2026

winDebug 调试

调试

qq_57283958的博客 5046

windebug使用

1.从进程中dump出dmp文件。从进程管理里 点击 【创建转储文件】 2.打开windebug,设置Symbol path :srv*DownstreamStore*http://msdl.microsoft.com/download/symbols (这里注意这个网址一定要能打开) 3.设置Image path 4.打开 dmp文件(ctrl+d) 5.输入命令.load ...

516

Windbg跟踪ACPI亮度设定

有阵子没更新博客了,趁着有空更新一下前阵子在工作遇到的内容: 公司要出货一批笔记本,对屏幕亮度上限有限定。我无意中发现可以通过控制ACPI命名空间中Method(_BCL)的行为来实现该需求,虽然事后证明这种方式是错误的,但并不影响我记下windbg跟踪ACPI的方法。 先简单介绍一下Method(_BCL)的作用,翻开ACPI Spec会看到下列定义: 这是一个Bios提供给OS用于设置集显亮度百分比的接口(强调一下,仅设置集显,不包含外显)。对于Win10,Method(_BCL)在切换显示比列

lixiangminghate的专栏 1367

ACPI-ASL调试指南:用WinDbg分析DSDT表里的隐藏设备信息(附最新工具链配置)

本文详细介绍了如何使用WinDbg调试ACPI-ASL代码,分析DSDT表中的隐藏设备信息。通过配置最新工具链、动态捕获运行时状态和高级调试技巧,帮助开发者解决硬件兼容性问题,如设备枚举异常和电源管理故障。文章还提供了实战案例,展示如何修复NVMe SSD识别异常,提升系统稳定性。

s1t2u3的博客 559

Windows调试工具入门 — 1

一、  引子 Debugging Tools for Windows是微软发布的一套用于软件调试的工具包(后面如果没有指明,那么我会使用WinDbg来作为这一套调试工具的简称)。我第一次接触是在三年前的一个内核驱动项目,由于进行了IDT中键盘鼠标中断的Hook,使用Softice调试时造成会造成影响,只得使用WinDbg通过串口进行双机调试。自此之后这个Windows平台下最为强大的调试工具一直

eqera的专栏 6803

如何在Free版的Windows上安装Checked版的ACPI.sys

调试ACPI BIOS与调试标准的内核代码有很大的不同。普通的驱动程序都是由某一特定的CPU的机器码组成,而ACPI BIOS不是。ACPI BIOS是以ACPI机器语言(AML)的形式储存在BIOS芯片中,操作系统加载时被调入内存,由AML解释器解释执行。微软提供了一个调试工具来调试AML代码——Microsoft AMLI Debugger。这个工具并不是一个独立的程序,它由两部分组成:一部分

Sean的笔记本 9961

WinDebug的一些基本使用命令

查看当前线程的调用堆栈 kb 查看全部线程的调用堆栈 ~*kb 显示分析的详细信息(通常使用此命令就可以看到调用堆栈,注意保存发布程序的pdb等文件) !analyze-v 继续执行 g 查看线程详细信息,例如线程入口地址 ~21(数字代表线程id) 查看变量地址 x变量名,可以用通配符 例如 x05memcorrupt!g_* 用给定类型查看对象 dt类型名地址 例如...

iMatt的专栏 1297

通过Windbg来追踪ASL code的运行

通过Windbg来追踪ASL code的运行: 目标机的配置: 第一步: 在BIOS Setup下面 disable secure boot(不然下面debug on 命令会失败);关闭防火墙。 第二步:替换acpi.sys1. 获取与目标机OS 同版本的check build ACPI.sys文件,替换系统中的C:\Windows\System32\drivers\acpi.s...

anqian8401的博客 1440

关于使用WinDebug查看线程死锁问题

最近项目接近尾声,不过项目到了测试的时候大问题来了,偶尔界面直接卡死以至于后续无法测试,初步怀疑是哪里死锁了,由于自己对WinDebug不是很熟悉,只知道WinDebug有查找内存泄露问题、线程死锁等相关功能,于是吩咐下面的人用winDebug去查找问题,索性网络资源比较多,通过一番调研找到了WInDebug死锁查找的解决方法,不过作为项目开发经理,遇到死锁的事应该能够在其他同时不能解决的时候也能

lixiang987654321的专栏 5201

搭建Win7调试ACPI的环境

这几天看中调试ACPI相关章节,里面提到为了使用AMLI调试器,需要检查版本(Checked Build)的ACPI.sys。     我们平时使用windows都是发行版本(Free Build),因此不能满足我们调试的需求。MSDN相关文档提到2个获得checked build的方法:1).从winddk的根目录下Debug/目录获取。很可惜,这个目录中只有ntkrnl.exe/hal.d

lixiangminghate的专栏 3274

windebug工具使用--dump分析

windebug工具使用–dump分析

weixin_44899507的博客 1109

Windows到Bios的桥梁:Windbg跟踪Win7开启ACPI

点击上方蓝色“终端研发部”,选择“设为星标” 学最好的别人,做最好的我们 本文为看雪论坛优秀文章看雪论坛作者ID:hyjxiaobia由于windows设备驱动程序被设计成以设备堆栈(De...

这个时代,作为程序员可能要学习小程序 1049
上一篇: Setup Script Programming_SSP中Separator 的用法
下一篇: 开始→运行→命令 集锦
x86ipc
博客等级 码龄17年 17粉丝 7原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值