Windbg 伪寄存器扩展

标签 windbg

我正在尝试使用 Windbg 在 Windows XP 中自动执行设备驱动程序的调试 session 。我的设备有一个“索引”寄存器和一个“数据”寄存器,两者都是内存映射的。索引寄存器必须填入内部寄存器的索引,可以从数据寄存器中读取值。
因此,以下 Windbg 命令正确打印了内部寄存器 0x​​4C 的值:

!ed [uc] 0xfa000000 0x4c; !dd [uc] 0xfa000004 L1

现在我想转储一系列内部寄存器,但似乎别名扩展在 !ed 命令中没有按预期工作。我正在尝试这个循环:
.for (r $t0=0; @$t0<0x100; r $t0=@$t0+1) { !ed [uc] 0xfa000000 @$t0; !dd [uc] 0xfa000004 L1  }

但似乎 !ed 命令被忽略了,就好像 @$t0 被扩展为一个空字符串一样。
尝试了“$t0”、“@$t0”、“${t0}”和“@${t0}”,但没有成功。我究竟做错了什么?

最佳答案

是的,似乎 !ed 不像其他命令那样评估它的参数。您需要事先评估它们,例如使用别名,如下所示:

.for (r $t0=0; @$t0<0x100; r $t0=@$t0+1) { as /x val @$t0 ; .block {!ed [uc] 0xfa000000 ${val} ; !dd [uc] 0xfa000004 L1 } }

关于Windbg 伪寄存器扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689741/

相关文章:

javascript - 如何在 windbg 脚本中并行执行命令?

debugging - windbg:在给定地址获取源代码文件,例如 "u address"

.net-4.0 - 如何解决 Windbg 中的 GetFrameContext 失败

WinDbg 脚本不工作

heap-memory - !heap –s 显示 “Lock contention”

debugging - GFlags - 命令行

c++ - 诊断无法停止的应用程序

c++ - 为什么 'this' 指针在单步执行代码时会更改其值?

首次运行时 sos.threads 中的 windbg 异常

windows - 将 Windbg 命令输出写入文件,但不写入控制台