在使用windbg脚本的时候,感觉很不方便。有时候想根据断点触发时的栈信息判断是否需要继续,但是没法定义变量来获取那些值,即便使用$tn和$un之类的伪变量获取那些值也很难进行复杂的判断或者运算。所以还是需要有更灵活的语言来辅助,所以找到了Pykd,虽然Immunity可以取代它,但有时不得不用windbg,接下来就让我们来学习下这个插件。
一、安装
从官网(https://pykd.codeplex.com/releases)下载对应版本双击便是。假如是手动安装,只需要将pykd.pyd复制到windbg安装目录的winext目录。
打开windbg,在命令行输入:
.load pykd
!py help
!pycmd
测试是否安装成功。
二、使用
可以在!pycmd中进行命令交互,也可以输入脚本:!py file1.py。下面重点说下常用的API:
Functions
- addr64地址转换
- appendSymbolPath增加符号表路径
- attachProcess附加进程
- breakin相当于CTRL+BREAK
- bugCheckData
- callExt调用扩展库函数
- compareMemory比较内存
- containingRecord
- currentTime获取当前时间
- debugAccess获取访问属性
- dbgCommand执行windgb内置命令
- detachProcess
- dprint打印
- dprintln打印一行
- expr计算表达式
- findMemoryRegion
- findSymbol查找符号,返回符号地址
- findSymbolAndDisp
- getCurrentProcess