вторник, 18 января 2011 г.

PYKD: Getting Started

Логично в самом начале жизни блога написать о том, как начать работу с PYKD.
Основная задача pykd - подружить windbg и python. А поэтому разумным кажется требование иметь на машине предустановленные версии этих продуктов. Если вы еще читаете это, я уверен, что у вас уже установлен windbg или по крайней мере, вы знаете о чем идет речь. На установке python остановимся чуть подробнее. Какую версию выбрать? 1) Разрядность ( 32 или 64 бита ) должна совпадать с разрядностью windbg 2) Версия python должна поддерживаться pykd. В настоящее время поддерживается только 2.6.х ( для других версий 2.x можно собрать самостоятельно ). Таким образом, мы однозначно определяем, какой именно пакет скачать с www.python.org.

Переходим к установке pykd. К сожалению, в настоящее время автоматический инсталлятор отсутствует и придется все делать вручную. Загружаем архив с последней версией: ссылка. В архиве два каталога - x64 и x86, в которых лежат сборки pykd.pyd соответствующей разрядности. Выбираем нужную версию и копируем ее. Только вот куда? В принципе, можно в любой каталог, из которого возможнен запуск исполняемых файлов. Наиболее удобным является подкаталог winext, расположенный в каталоге установки windbg. При выборе этого каталога при последующей загрузке расширения в windbg достаточно будет просто указать имя. В других случаях придется указывать полный путь.

Можно начинать работу? Не совсем. Для работы pykd необходимо, чтобы на машине был установлен Microsoft Visual C++ 2005 SP1 Redistributable Package нужной версии и разрядности. Загрузить его можно с сайта Microsoft или со страницы загрузки: ссылка, файл vcredist_x86 или vcredist_x64. С выбором нужного, надеюсь, понятно. Вот теперь - можно начинать!

Запускаем отладчик windbg и открываем любую отладочную сессию: начинаем отладку пользоватеьского процесса, загружаем креш-дамп или подключаемся к отладчику ядра удаленной машины. Далее необходимо загрузить расширение. Если вы установили его по рекомендованному пути, сделать это просто:
.load pykd.pyd
Проверим, что все заработало, вводим команду !pycmd для перехода в режим интерпретатора python
1>!pycmd
>>> print "hello world!"
hello world!
>>>
Для выхода из режима интерпретатора просто вводим пустую строку. Если у вас получилось вывести на экран приветственную строку, значит с установкой и настройкой все получилось. Теперь пора подумать, какую из этого можно извлечь пользу. Сам по себе интерпретатор python кончено очень занимательная штука, но нам он нужен для управления отладчиком. Поскольку pykd.pyd является не только расширением для windbg, но и модулем python, он нам в этом и поможет:
1>!pycmd
>>> from pykd import *
>>> eax = reg("eax")
>>> print eax
125
>>>
Мы использовали функцию reg, реализованную в модуле pykd. Полный список API приведен здесь.
Сессия интерпретатора питона длится, пока pykd не будет выгружен. Поэтому можно много позже сделать
1>!pycmd
>>> print eax
125
и получить сохраненное в контексте python значение.

Кроме глобальной сессии интерпретора python есть возможность выполнить скрипт в изолированной среде:
1>!py myscript.py "hello script"
hello from script
На сайте проекта приведены как небольшие демонстрационные примеры таких скриптов, так и скрипты, которые вы можете использовать в своей работе. Здесь можно получить подробную информацию.

И так, вы попробовали и:
1) вам понравилось. Тогда помогите проекту: примите участие в разработке, написании документации, пришлите свой полезный скрипт, киньте ссылку коллеге - он то наверняка сидит без дела целыми днями в инете. Да просто напишите нам свое мнение - для нас это будет очень ценно.
2) не понравилось. Очень вам просим, напишите, что именно! Это очень важно для нас.

Комментариев нет:

Отправить комментарий