安装与配置 windbg 的 symbol (符号)
第一步 下载WinDBG
请通过此链接下载Web安装版的Windows SDK:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&displaylang=en
并在安装时清除所有组件的安装复选,并勾选“Debugging Tools for Windows”选项前的复选框进行安装。
另外,也可以通过在以下链接下载以前版本的windbg工具:
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
http://msdn.microsoft.com/zh-cn/windows/hardware/gg463016中文路径
win8:http://msdn.microsoft.com/zh-cn/windows/hardware/bg127147,再直接选
(仅英文)
您将需要检查是否有 WinDBG 更新版本,因为该小组似乎具有相当紧凑的发布日程安排,并且每隔几个月就会发布更新版本。
下载对应的symbol包:
XPSP3的:http://msdl.microsoft.com/download/symbols/packages/windowsxp/WindowsXP-KB936929-SP3-x86-symbols-full-ENU.exe
其它系统:http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#d(要下载retail版本,不要下checked)
下完了解包到C:\WINDOWS\Symbols里(当然你也可以换任意位置),然后WINDBG里符号路径可以这样设置:C:\WINDOWS\Symbols;
SRV*C:\MyLocalSymbols*http://msdl.microsoft.com/download/symbols
第二步 双击下载的文件安装 windbg .安装时注意记住安装到那里了.
第三步 windbg 访问符号需要两个文件(SYMSRV.DLL 和 SYMSTORE.EXE)所以添加主 path 环境变量中它们的路径进去,即:你的 windbg 安装目录.
操作方法:在桌面我的电脑点右键--属性--高级--环境变量,在系统变量列表框中找到 path 双击,在变量值最后面加一个分号再把你的安装目录写上.点确定.
这一步是告诉 windbg 那两个文件放在什么地方.
第四步 新建一个环境变量_NT_SYMBOL_PATH 值为: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols
操作方法:桌面我的电脑点右键--属性--高级--环境变量 ,点击新建,把上面的变量名和变量值填上.这一步的意思是说告诉 windbg ,我的符号文件存放在c:\mysymbol 中(当然其实里面什么也没有,甚至这个文件夹也不存在,不过没关系,系统找不到的话会给你创建一个,并在上面的网址中去帮你下载符号文件放在里面)
第五步 运行 windbg 打开一个exe文件或者附加到一个进程里去, 你会看到 Symbol search path is: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols
打开c盘看到有一个新目录 mysymbol,里面有 windbg 新下载的文件.
这样就差不多了,测试一下。选“内核调试-本地内核调试”,输入dt _EPROCESS,如果能列出EPROCESS结构则说明成功了。
还有一点要说,如果想使用用户态的符号,要再加上一句C:\WINDOWS\Symbols\dll;,如果安装了360,还要关闭360的自我保护(单纯地退出360是不行的),可以在“木马防火墙-设置-保护360产品”下关闭,接着本地内核调试,要先输入.reload(不reload无法使用用户符号),如果出现以下字样就说明成功了(不关闭360自我保护会失败):
lkd> .reload
Connected to Windows XP 2600 x86 compatible target at (Mon Nov 1 09:36:58.439 2010 (GMT+8)), ptr64 FALSE
Loading Kernel Symbols
...............................................................
................................................................
...
Loading User Symbols
......................................
Loading unloaded module list
................
再来测试一下,输入u user32!ValidateHwnd(注:ValidateHwnd是user32.dll里一个未导出的函数),应该可以看到类似下面的输出:
lkd> u user32!ValidateHwnd
USER32!ValidateHwnd:
77d184e0 64a118000000 mov eax,dword ptr fs:[00000018h]
77d184e6 85c9 test ecx,ecx
77d184e8 740c je USER32!ValidateHwnd+0x19 (77d184f6)
77d184ea 3b88f4060000 cmp ecx,dword ptr [eax+6F4h]
77d184f0 0f84c6090100 je USER32!ValidateHwnd+0x12 (77d28ebc)
77d184f6 b201 mov dl,1
77d184f8 eb26 jmp USER32!HMValidateHandle (77d18520)
77d184fa 90 nop
这样内核符号和用户符号就都能用了~
还有一点要说,可能因为用户符号太多,如果加载了用户符号之后再使用dt命令查结构会是WINDBG进入“*BUSY*”状态,失去响应,这点要注意
http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=4596