我们都知道windbg可以使用扩展命令,扩展命令的实现是通过动态加载扩展的DLL文件。命令格式为![扩展模块名字].<扩展命令>[参数],系统已经帮助我们加载了好多扩展模块,
比如调试网络的ndiskd.dll ,64位windbg调试32程序的wow64exts.dll 。
同样我们也可以使用自己的扩展模块,比如python脚本,这样以来就可以对PEB 线程 堆栈进行一些复杂的操作,windbg+灵活的脚本可以说所向披靡。
一,安装python
我这里提供了python2.7 默认安装就可以,唯一需要注意的是,把python注册到环境变量中去。总之权限越大越好,反正不是恶意文件。
我这里提供了python-2.7.msi
二,安装pykd.pyd
把网上下载的pykd.pyd 拷贝到windbg安装目录的winext目录中去。不过我这里提供了官方给出的安装包,有一个好处就是安装简单,并且为后面的windbg支持mona做准备。
安装包名字pykd-0.2.0.29-x86-python-2.7-setup.exe。
三,进行测试
开始windbg,F6 ,attach一个进程。然后用.load命令加载扩展脚本。
0:006> .load pykd.pyd
0:006> !py C:\Users\ma\Desktop\python_test\helloword.py
script file not found
0:006> !py C:\Users\ma\Desktop\python_test\helloworld.py
hello world
(3, 4)
可以看到!py命令可以加载python脚本了。这里要用全路径,除非你把python脚本放到windbg的安装目录。
四 不得不说的,python对调试的支持---丰富的API
Functions
- addr64地址转换
- appendSymbolPath增加符号表路径
- attachProcess附加进程
- breakin相当于CTRL+BREAK
- bugCheckData
- callExt调用扩展库函数
- compareMemory比较内存
- containingRecord
- currentTime获取当前时间
- debugAccess获取访问属性
- dbgCommand执行windgb内置命令
- detachProcess
- dprint打印
- dprintln打印一行
- expr计算表达式
- findMemoryRegion
- findSymbol查找符号,返回符号地址
- findSymbolAndDisp
- getCurrentProcess
- getCurrentProcessId
- getCurrentThreadId
- getFrame获取栈帧,返回stackFrame类