我正在尝试使用Windbg在Windows XP中自动化设备驱动程序的调试会话。我的设备有一个“索引”寄存器和一个“数据”寄存器,两个存储器映射。索引寄存器必须填充内部寄存器的索引,并且可以从数据寄存器中读取该值。 因此,followind Windbg命令正确打印了内部寄存器0x4C的值:
!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}”,但没有成功。我做错了什么?
答案 0 :(得分:3)
是的,似乎!ed不会像其他命令一样评估其参数。您需要事先评估它们,例如使用别名,例如:
.for (r $t0=0; @$t0<0x100; r $t0=@$t0+1) { as /x val @$t0 ; .block {!ed [uc] 0xfa000000 ${val} ; !dd [uc] 0xfa000004 L1 } }