В наших предыдущих блогах
PyKD помогает в автоматизации задач отладки и анализа аварийных дампов с использованием python. Приятной особенностью PyKD является то, что он может использоваться в автономном скрипте или из WinDBG.
Установка PyKD
Установка PyKD проста - особенно если мы хотим использовать его из WinDBG. Для начала загрузите загрузчик с
После того, как вы скопировали его, вы можете проверить его правильность, загрузив pykd и выполнив «! Help»:
Вы также можете получить интерактивную консоль с помощью команды «! Py» в windbg:
0:008> !pip install pykd
Collecting pykd
Downloading
Installing collected packages: pykd
Successfully installed pykd-0.3.3.4
Выполнение скриптов Python из WinDBG
PyKD имеет богатый API, который позволяет нам выполнять большинство функций, которые мы делаем из WinDBG, но из скрипта Python.
Одна из самых простых функций, с которой можно начать - это то dbgCommand, что мы можем выполнять команды windbg изнутри python.
Например:
Нечто более значимое
Давайте сделаем что-то более осмысленное, используя настоящий PyKD API. Для этого блога я напишу небольшой скрипт PyKD, который устанавливает точку останова и выводит исполняемый код Javascript.
Для решения этой задачи я буду использовать следующие API-интерфейсы PyKD:
pykd.module(mod_name): Принимает имя загруженного модуля в качестве аргумента. pykd.module(mod_name).begin()Возвращает базовый адрес загруженного модуля. pykd.setBp(addr,handler): Принимает два аргумента: адрес для установки точки останова и обработчик функции, который обрабатывает точку останова при получении. pykd.reg(register)Возвращает значение определенного регистра. pykd.loadPtrs(addr,num): Разыменовывает адрес и возвращает указатели в списке. pykd.loadWStr(addr): Загрузить строку в кодировке Юникод из адреса. pykd.go(): Продолжает выполнение. pykd.dprintln(str): Выводит строку в окне windbg.
Идея довольно проста. Установите точку останова для определенной функции и дамп JavaScript, который будет выполняться:
Обработчик точек останова разыменовывает один из адресов в стеке, а затем выводит выполняемый оператор JavaScript.
Вывод:
Вот и все на сегодня. В нашем следующем блоге MindshaRE, связанном с PyKD, мы углубимся в PyKD и покажем, как написать небольшой скрипт, который обнаруживает и записывает сбои для размытых целей.
Источник:
Ссылка скрыта от гостей
мы обсуждали способы поиска вариантов во время поиска ошибок. В этом блоге мы решили поговорить о чем-то немного другом, а именно о динамическом анализе. В частности, мы рассмотрим сценарии PyKD для решения определенных задач.PyKD помогает в автоматизации задач отладки и анализа аварийных дампов с использованием python. Приятной особенностью PyKD является то, что он может использоваться в автономном скрипте или из WinDBG.
Установка PyKD
Установка PyKD проста - особенно если мы хотим использовать его из WinDBG. Для начала загрузите загрузчик с
Ссылка скрыта от гостей
, затем извлеките библиотеку DLL для нужной архитектуры (x86 или x64) в winextкаталог вашей установки WinDBG.После того, как вы скопировали его, вы можете проверить его правильность, загрузив pykd и выполнив «! Help»:
Вы также можете получить интерактивную консоль с помощью команды «! Py» в windbg:
0:008> !pip install pykd
Collecting pykd
Downloading
Ссылка скрыта от гостей
0f0fb3426ee39aa3fc0369ce36bcf0bff8d9/pykd-0.3.3.4-cp27-none-win32.whl (8.9MB)Installing collected packages: pykd
Successfully installed pykd-0.3.3.4
Выполнение скриптов Python из WinDBG
PyKD имеет богатый API, который позволяет нам выполнять большинство функций, которые мы делаем из WinDBG, но из скрипта Python.
Одна из самых простых функций, с которой можно начать - это то dbgCommand, что мы можем выполнять команды windbg изнутри python.
Например:
Нечто более значимое
Давайте сделаем что-то более осмысленное, используя настоящий PyKD API. Для этого блога я напишу небольшой скрипт PyKD, который устанавливает точку останова и выводит исполняемый код Javascript.
Для решения этой задачи я буду использовать следующие API-интерфейсы PyKD:
pykd.module(mod_name): Принимает имя загруженного модуля в качестве аргумента. pykd.module(mod_name).begin()Возвращает базовый адрес загруженного модуля. pykd.setBp(addr,handler): Принимает два аргумента: адрес для установки точки останова и обработчик функции, который обрабатывает точку останова при получении. pykd.reg(register)Возвращает значение определенного регистра. pykd.loadPtrs(addr,num): Разыменовывает адрес и возвращает указатели в списке. pykd.loadWStr(addr): Загрузить строку в кодировке Юникод из адреса. pykd.go(): Продолжает выполнение. pykd.dprintln(str): Выводит строку в окне windbg.
Идея довольно проста. Установите точку останова для определенной функции и дамп JavaScript, который будет выполняться:
Обработчик точек останова разыменовывает один из адресов в стеке, а затем выводит выполняемый оператор JavaScript.
Вывод:
Вот и все на сегодня. В нашем следующем блоге MindshaRE, связанном с PyKD, мы углубимся в PyKD и покажем, как написать небольшой скрипт, который обнаруживает и записывает сбои для размытых целей.
Источник:
Ссылка скрыта от гостей