Расширение псевдорегистрации Windbg - PullRequest
4 голосов
/ 22 апреля 2010

Я пытаюсь автоматизировать сеанс отладки драйвера устройства в Windows XP с помощью Windbg. Мое устройство имеет регистр «индекс» и регистр «данные», оба отображены в памяти. Регистр индекса должен быть заполнен индексом внутреннего регистра, и значение может быть считано из регистра данных. Итак, следующая команда 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}", но безуспешно. Что я делаю не так?

1 Ответ

3 голосов
/ 27 апреля 2010

Да, похоже! Ed не оценивает свои аргументы, как другие команды.Вам необходимо предварительно оценить их, например, с помощью псевдонима, например:

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