我正在尝试用Windbg在windowsxp中自动化设备驱动程序的调试会话。我的设备有一个“索引”寄存器和一个“数据”寄存器,都是内存映射的。索引寄存器必须填充内部寄存器的索引,并且可以从数据寄存器读取值。 因此,followind Windbg命令正确打印内部寄存器0x4C的值:
!ed [uc] 0xfa000000 0x4c; !dd [uc] 0xfa000004 L1
.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 } }