【问题标题】:Read symbols in WinDBG without exe在没有 exe 的情况下读取 WinDBG 中的符号
【发布时间】:2021-01-31 04:10:04
【问题描述】:

我一直在使用 WinDBG 查看附加的 C++ exe 的一些结构,例如

dt blah::class::thingy
    +0x000 Flags: Uint4B
    +0x004 Whatever : Ptr64 something

但是我已经获得了一些较早版本的旧 PDB 文件,我想查看相同的结构以比较更改,但我无法加载旧 PDB,因为它们与当前 exe 不匹配版本。

所以我的问题是无论如何要在 WinDBG 中使用 dt 命令而不首先加载/附加到 exe?我已经看过 DIA SDK,但就我需要的复杂性而言,它似乎超出了我的想象。

我不确定是否可以在不先加载 exe 的情况下加载 PDB?

【问题讨论】:

标签: c++ windows debugging windbg pdb-files


【解决方案1】:

使用.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

【讨论】:

  • 谢谢。我对函数根本不感兴趣,我只需要能够查看结构和类。那么我可以将旧的 pdb 放入 symcache 并告诉它加载吗?
  • 是的,您需要将不匹配的 pdb 存储在 pdb 搜索路径中,然后 do.reload /f 加载不匹配的 pdb 我用演示编辑了答案
猜你喜欢
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
相关资源
最近更新 更多