2013-09-25 2 views
1

Я работаю над скриптом, который запускает несколько команд WinDbg, выводит вывод некоторых и анализирует другие, используя .foreach.WinDbg скрипт синтаксического анализа двойной котировки

Моя проблема заключается в том, что, когда я пытаюсь запустить:

0: kd> dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT 

Результат выглядит примерно так:

+0x000 variable1 : 5 
    +0x004 variable2 : 0 
    +0x008 variable3 : 1 
    +0x00c variable4 : 1 
    +0x010 variable5 : 8 
    +0x014 variable6 : (null) 
    +0x018 variable7 : 1 
    +0x01c table1 : "" 
    [00] 0 '' 
    [01] 0 '' 
    [02] 0 '' 
    [03] 0 '' 

...

Создание 'команды' псевдоним, который эта команда, затем работает:

.foreach(word {command}) { .echo "word" } 

даст ошибку:

Syntax error at .echo """" 

Есть ли способ просто .continue, если слово «» ??

Запуск аль показывает следующее:

Alias   Value 
-------   ------- 
command   dt -b -r 0xdeadbeef drivername!DRIVER_DEVICE_CONTEXT 
word    "" 
+0

Я также отправил это здесь, так как существует относительно мало людей, которые разбираются в WinDbg сценариев. Я постараюсь, чтобы эти два синхронизировались. http://social.msdn.microsoft.com/Forums/en-US/a29e74c5-63f3-4478-8f44-780a2d774542/windbg-script-parsing-alias-of-doublequote –

ответ

1

Попробуйте одинарные кавычки:

.foreach(word {command}) { .echo 'word' } 

Могу ли я рекомендую вам использовать питон с WinDbg? Это сделает вашу жизнь проще :)

pykd.codeplex.com

Если это не понравится вам, вы всегда можете вернуть его обратно :).

Например:

DRIVER_DEVICE_CONTEXT = typeInfo("drivername!DRIVER_DEVICE_CONTEXT") 

for fieldName, fieldType in DRIVER_DEVICE_CONTEXT: 
    print fieldName 
+0

Хорошо, что работает для эха, но не работает для $ sp - .foreach (word {command}) {.if ($ spl ('""', 'word') {. echo Is} .else {.echo Isnt}} Синтаксическая ошибка в '(' "" ', '+ 0x000') {. Echo Is} .else {.echo Isnt} Мне нужно будет узнать о PyKd: я работаю над этим скриптом для кого-то еще, и я не знаю, насколько широко он будет развернут (и если у каждого, использующего этот скрипт, есть права администратора для установки Python/PyKd) –

+0

Хотя ответ на WinDbg-native будет приятным, это функциональная альтернатива. Принимая в качестве наилучшего ответа (если только кто-то не выясняет собственный способ WinDbg) –

+0

вы можете используйте .catch, чтобы игнорировать ошибки: .foreach (word {command}) {.catch {.if {$ spl ("pattern", "$ {word}") {.echo "Найдено patte rn "}}} Вы увидите сообщения об ошибках, но ваш скрипт достигнет конца –

Смежные вопросы