try..except в интерактивной сессии Python Windbg выбрасывает меня из сессии Python - PullRequest
0 голосов
/ 07 мая 2019

Я работаю с PYKD, делаю анализ дампа. Библиотека PYKD используется в сценарии heap_stat, и я хотел бы использовать библиотеку PYKD более интерактивным способом, например:

Windbg prompt>!py
Input>dbgCommand("x /2 *!CStringArray*vftable*")

Это работает нормально (я знаю, что это бесполезно, я просто хочу показать, что это работает).

Однако скрипт heap_stat содержит следующий фрагмент исходного кода:

try:
  vftable_candidate = ptrPtr(ptr) # which pointer value is present on that spot in memory?
  dprintln("DDS vftable_candidate [%08x], ptr value [%d], ptr pointer [%08x]" % (vftable_candidate, ptr, ptr))
except:
  continue

Когда я пытаюсь сделать это интерактивно, кажется, что это не работает:

Windbg prompt>!py
Input>ptrPtr(‭48806712‬)

Это приводит к следующей ошибке, которая выбрасывает меня из сеанса Python:

  File "<console>", line 1


Traceback (most recent call last):

  File "<string>", line 1, in <module>

  File "C:\Python27\Lib\code.py", line 243, in interact
    more = self.push(line)

  File "C:\Python27\Lib\code.py", line 265, in push
    more = self.runsource(source, self.filename)

  File "C:\Python27\Lib\code.py", line 79, in runsource
    self.showsyntaxerror(filename)

  File "C:\Python27\Lib\code.py", line 139, in showsyntaxerror
    map(self.write, list)

  File "C:\Python27\Lib\code.py", line 171, in write
    sys.stderr.write(data)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 11: ordinal not in range(128)

Это нормально : есть причина для обертывания этого вызова функции внутри предложения try..except, поэтому давайте теперь попробуем обернуть эту функцию внутри предложения try..except в интерактивном сеансе Python:

Windbg prompt>!py
Input>try: ptrPtr(‭48806712‬) except: continue

=> Это дает ту же ошибку, я снова выбрасываюсь из сеанса Python, несмотря на try..except. Скорее всего, это связано с неправильным отступом, но, с другой стороны, интерактивный сеанс Windbg Python не допускает многострочный, поэтому я не могу использовать отступ Python.

Есть ли способ использовать try..except предложения в сеансе Python Windbg PYKD?
Заранее спасибо

P.s. для вашего понимания: это поведение (исключаемое из интерактивного сеанса) кажется типичным для Windbg PYKD, как вы можете видеть в следующей командной строке Python session:

Windows Prompt>python
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print 1/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>

Как видите, исключение выдается, но я не выхожу из сеанса Python (смотрите подсказку >>>).

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

интерактивный сеанс Windbg Python не допускает многострочный, поэтому я не могу использовать отступ Python.

Вы не правы.Вы можете использовать многострочный

>>> try:
...    1/0
... except:
...   print 0
... 
0
>>> 
0 голосов
/ 08 мая 2019

Кажется, вы используете копирование / вставку, и ваша входная строка содержит символы юникода, а python не может ее декодировать.Попробуйте повторить 'ptrPtr (48806712)'

...