设置符号路径
利用环境变量设置符号路径
在WinDbg启动时,会根据 _NT_ALT_SYMBOL_PATH
和 _NT_SYMBOL_PATH
的值设置符号路径:
> set _NT_ALT_SYMBOL_PATH="D:symbols"
> windbg notepad.exe
利用启动参数设置符号路径
可以使用选项 -y
来指定符号路径:
> windbg -y "E:symbols" notepad.exe
在WinDbg命令行中设置和查看符号路径
查看符号路径:
0:000> .sympath
设置符号路径:
0:000> .sympath D:symbols
追加符号路径:
0:000> .sympath+ G:worksymbols
设置 Microsoft 公有符号存储库:
0:000> .symfix
追加 Microsoft 公有符号存储库:
0:000> .symfix+
通过 cache*
设置缓存:
0:000> .sympath cache*d:symbols;G:worksymbols
设置符号服务器,基本语法为:SRV*[cache*]toppath
,其中 SRV
表示这是一个符号服务器路径,[cache*]
用来设置存储从服务器下载的符号文件的路径。下例设置 Microsoft 公有符号服务器路径,并将下载的符号文件存储在 D:symbols
目录下。
0:000> .sympath SRV*D:symbols*http://msdl.microsoft.com/download/symbols
查看已加载的模块和符号文件
通过 lm
查看已加载的模块和符号文件:
0:000> lm
start end module name
013a0000 013de000 notepad (deferred)
...
77160000 772e3000 ntdll (export symbols) C:WINDOWSSYSTEM32
tdll.dll
通过 lmi
查看模块头部信息:
0:000> !lmi ntdll.dll
Loaded Module Info: [ntdll.dll]
Module: ntdll
Base Address: 77160000
Image Name: ntdll.dll
Machine Type: 332 (I386)
Time Stamp: 58256ca0 Fri Nov 11 15:00:48 2016
Size: 183000
CheckSum: 1883ce
Characteristics: 2102
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 23, 1f9ec, 1edec RSDS - GUID: {9D5EBB42-7B34-49C0-BA16-0009A9070625}
Age: 1, Pdb: wntdll.pdb
?? 554, 1fa10, 1ee10 [Data not mapped]
Image Type: FILE - Image read successfully from debugger.
C:WINDOWSSYSTEM32
tdll.dll
Symbol Type: EXPORT - PDB not found
Load Report: export symbols
重新加载符号
通过 .reload
重新加载符号。注意这条命令并不会真正的重新加载符号,而只是把已加载模块的符号信息清除,在具体执行需要解析符号的命令时,才真正加载符号。
0:000> .reload
重新加载某个模块:
0:000> .reload combase.dll
重新加载某个模块,并强制解析:
0:000> .reload /f combase.dll
通过 !sym noisy
打开执行 .reload
系列命令时的详细信息:
0:000> !sym noisy
通过 !sym quiet
关闭执行 .reload
系列命令时的详细信息:
0:000> !sym quiet
验证符号
通过 !chksym
来验证符号文件与映像文件是否匹配:
0:000> !chksym bcrypt
C:WINDOWSSysWOW64crypt.dll
Timestamp: 584A7C20
SizeOfImage: 1B000
pdb: bcrypt.pdb
pdb sig: BEFD22F9-21C0-4067-B22B-B4CC1E8ED238
age: 1
Loaded pdb is d:symbolscrypt.pdbBEFD22F921C04067B22BB4CC1E8ED2381crypt.pdb
bcrypt.pdb
pdb sig: BEFD22F9-21C0-4067-B22B-B4CC1E8ED238
age: 1
MATCH: bcrypt.pdb and C:WINDOWSSysWOW64crypt.dll
查看符号
通过 x
命令查看符号,语法为:x [options] module!symbols
。其中 module
和 symbols
中可以包含通配符。
在 notepad
模块中查找包含 Thread
的符号:
0:000> x notepad!*Thread*
通过 ln
列出与特定地址相关的符号:
0:000> ln 013bf344
(013bf344) notepad!_imp__CoCreateFreeThreadedMarshaler | (013bf348) notepad!_imp__CoWaitForMultipleHandles
Exact matches:
notepad!_imp__CoCreateFreeThreadedMarshaler = <no type information>