在没有 exe 的情况下读取 WinDBG 中的符号
Read symbols in WinDBG without exe
我一直在使用 WinDBG 查看附加的 C++ exe 的一些结构,例如
dt blah::class::thingy
+0x000 Flags: Uint4B
+0x004 Whatever : Ptr64 something
但是我得到了一些早期版本的旧 PDB 文件,我想查看相同的结构以比较更改,但我无法加载旧的 PDB,因为它们与当前 exe 版本。
所以我的问题是无论如何都可以在 WinDBG 中使用 dt
命令而不先 loading/attaching 到 exe?我看过 DIA SDK,但就我需要的复杂性而言,它似乎超出了我的理解范围。
我不确定是否可以在不先加载 exe 的情况下加载 PDB?
使用.symopt+ SYMOPT_LOAD_ANYTHING
将不匹配的 pdb 加载到当前 exe
但请注意并谨慎使用
结构识别所需的类型信息不会有太大影响。
但函数的源行号或反汇编地址可能不匹配
并提供虚假信息
您可以使用 !chksym
使用 pdb 检查模块
如果它不匹配并且你不关心源代码行和类似的东西但只需要 typeinfo
您可以使用 .symopt+ 0x40 加载不匹配的 pdb 并将不匹配的 pdb 存储在 pdbsearchpath (cache/curdir/sympath/etc)
0:000> !chksym loadany.exe loadany.pdb
loadany.exe
Timestamp: 5F89E8D1
SizeOfImage: 4E000
pdb: C:\Users\XX\Desktop\loadany\loadany.pdb
pdb sig: 2FDF9552-88E3-4452-9B5D-A03B24165869
age: 1
loadany.pdb
pdb sig: CB93F230-0E80-4485-AA6F-42202F1CF233
age: 1
sig MISMATCH: loadany.pdb and loadany.exe
0:000> !sym noisy
noisy mode - symbol prompts off
0:000> .reload /f loadany.exe
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DBGHELP: C:\Users\XX\Desktop\loadany\loadany.pdb - mismatched pdb
DBGHELP: Couldn't load mismatched pdb C:\Users\XX\Desktop\loadany\loadany.exe
DBGHELP: loadany - no symbols loaded
0:000> .symopt +0x40
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Symbol options are 0x800B0367:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0:000> .reload /f loadany.exe
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DBGHELP: C:\Users\XX\Desktop\loadany\loadany.pdb - mismatched pdb
DBGHELP: Loaded mismatched pdb for C:\Users\XX\Desktop\loadany\loadany.exe
DBGHELP: loadany - private symbols & lines
C:\Users\XX\Desktop\loadany\loadany.pdb - unmatched
我一直在使用 WinDBG 查看附加的 C++ exe 的一些结构,例如
dt blah::class::thingy
+0x000 Flags: Uint4B
+0x004 Whatever : Ptr64 something
但是我得到了一些早期版本的旧 PDB 文件,我想查看相同的结构以比较更改,但我无法加载旧的 PDB,因为它们与当前 exe 版本。
所以我的问题是无论如何都可以在 WinDBG 中使用 dt
命令而不先 loading/attaching 到 exe?我看过 DIA SDK,但就我需要的复杂性而言,它似乎超出了我的理解范围。
我不确定是否可以在不先加载 exe 的情况下加载 PDB?
使用.symopt+ SYMOPT_LOAD_ANYTHING
将不匹配的 pdb 加载到当前 exe 但请注意并谨慎使用
结构识别所需的类型信息不会有太大影响。
但函数的源行号或反汇编地址可能不匹配 并提供虚假信息
您可以使用 !chksym
使用 pdb 检查模块
如果它不匹配并且你不关心源代码行和类似的东西但只需要 typeinfo
您可以使用 .symopt+ 0x40 加载不匹配的 pdb 并将不匹配的 pdb 存储在 pdbsearchpath (cache/curdir/sympath/etc)
0:000> !chksym loadany.exe loadany.pdb
loadany.exe
Timestamp: 5F89E8D1
SizeOfImage: 4E000
pdb: C:\Users\XX\Desktop\loadany\loadany.pdb
pdb sig: 2FDF9552-88E3-4452-9B5D-A03B24165869
age: 1
loadany.pdb
pdb sig: CB93F230-0E80-4485-AA6F-42202F1CF233
age: 1
sig MISMATCH: loadany.pdb and loadany.exe
0:000> !sym noisy
noisy mode - symbol prompts off
0:000> .reload /f loadany.exe
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DBGHELP: C:\Users\XX\Desktop\loadany\loadany.pdb - mismatched pdb
DBGHELP: Couldn't load mismatched pdb C:\Users\XX\Desktop\loadany\loadany.exe
DBGHELP: loadany - no symbols loaded
0:000> .symopt +0x40
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Symbol options are 0x800B0367:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0:000> .reload /f loadany.exe
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DBGHELP: C:\Users\XX\Desktop\loadany\loadany.pdb - mismatched pdb
DBGHELP: Loaded mismatched pdb for C:\Users\XX\Desktop\loadany\loadany.exe
DBGHELP: loadany - private symbols & lines
C:\Users\XX\Desktop\loadany\loadany.pdb - unmatched