代码之家  ›  专栏  ›  技术社区  ›  Giuseppe Guerrini

Windbg伪寄存器扩展

  •  4
  • Giuseppe Guerrini  · 技术社区  · 16 年前

    我正在尝试用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}”,但没有成功。我做错什么了?

    1 回复  |  直到 14 年前
        1
  •  3
  •   plodoc    16 年前

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

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