在网上找的WinDbg单独安装包为dbg_x86_6.12.2.633.msi
环境配置:
主机win7 + VMware虚拟机XP sp3(原版系统)
1. 进入XP系统,打开终端添加带调试的启动项:
bootcfg /copy /d "XP Professional with Debug" /id 1
bootcfg /debug on /id 2 /port com1 /BAUD 115200
2. 关闭xp系统,在其”虚拟机设置“中”添加“串行端口,选”输出到命名管道"
然后设置命名管道为\\.\pipe\com_1,选择“此终端是服务器”,“另一终端是一个应用程序”,勾上“轮询时主动放弃CPU占用“
再次启动xp系统,选择启动项中的”XP Professional with Debug“
3. 将WinDbg安装路径添加到系统环境变量
在终端输入:windbg -b -k com:port=\\.\pipe\com_1,baud=115200,pipe
按住ctrl+s,在弹出的窗口中输入在线符号链接:SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
(按照这样设置,WinDbg将先从本地文件夹C:\Symbols中查找Symbol,如果找不到,则自动从网上下载Symbols)
此时就可以调试了
若虚拟机为win7或查看更详细的配置见:http://www.cnblogs.com/mvperic/archive/2010/07/25/1784790.html
---------------------
WinDbg常用命令:
x [module]![symbol] —— 查找模块内的函数和全局变量,可以使用通配符*
dt 类型名 —— 打印类型信息
常见类型名:_EPROCESS, ETHREAD, _PEB, _TEB, _UNICODE_STRING, _DRIVER_OBJECT, _LIST_ENTRY, _FILE_OBJECT, _CONTEXT, ...
dd 地址/符号/寄存器 Ln —— 以双字形式打印内存数据,输出n组
db 地址/符号/寄存器 Ln —— 以单字形式打印内存数据,输出n组
da/du 地址/符号/寄存器 Ln —— 以ASCII/Unicode字符形式打印内存数据,输出n组
r —— 打印所有寄存器的值
lm —— 显示模块信息
g —— 继续执行
p[count] —— 单步执行count次
pa[addr] —— 单步执行到地址addr
pt —— 单步执行到下一个返回指令
t[count] —— 跟踪执行count次
ta[addr] —— 跟踪执行到地址addr
tt —— 跟踪执行到下一个返回指令
u[addr] —— 反汇编uf[addr] —— 反汇编函数所有指令
bp<location> —— 下断点
bu<location> —— 下断点
bl [number] —— 列出断点
be [number] —— 使断点生效
bd —— 使断点失效
bc[number] —— 清除断点
bp nt!func "j poi(esp+8) = 0 ''; 'gc' " —— 设条件断点,当函数的第二个参数为0时停下
!process 0 0 —— 列出所有进程最简洁信息(第一个参数表示输出所有进程,第二个参数是详细级别)
!process addr 1 —— 列出EPROCESS地址为addr的进程信息
.process /r /p addr —— 切换到EPROCESS地址为addr的进程上下文
kb —— 显示调用栈
.hh [command] —— 查看命令帮助
!peb —— 显示当前进程环境块
!dlls —— 显示当前进程加载的dll模块
!handle —— 显示当前进程的所有句柄
!idt 2e —— 显示2e号中断服务
rdmsr 0x176 —— 读取msr[176]的值
更详细的参看:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html
---------------------
WinDbg脚本下载: