【问题标题】:Is it possible to add missing symbols to public symbols in a windbg debugging session?是否可以在 windbg 调试会话中将缺少的符号添加到公共符号?
【发布时间】:2011-05-15 18:09:12
【问题描述】:

我正在尝试使用 windbg 中的“dt”命令查看 IMAGE_DOS_HEADER 结构:

0:001> dt ntdll!IMAGE_DOS_HEADER
**Symbol ntdll!IMAGE_DOS_HEADER not found**

我搜索了一下,发现其他人已经可以做到这一点: MSDN Blogs > Junyoung's Blog > Portable Executable File Format on Memory Dump

0:000> dt IMAGE_DOS_HEADER 77c00000
ntdll!IMAGE_DOS_HEADER
   +0x000 e_magic          : 0x5a4d ? MZ
   +0x002 e_cblp           : 0x90
   +0x004 e_cp             : 3
   +0x006 e_crlc           : 0
   +0x008 e_cparhdr        : 4
   +0x00a e_minalloc       : 0
   +0x00c e_maxalloc       : 0xffff
   +0x00e e_ss             : 0
   +0x010 e_sp             : 0xb8
   +0x012 e_csum           : 0
   +0x014 e_ip             : 0
   +0x016 e_cs             : 0
   +0x018 e_lfarlc         : 0x40
   +0x01a e_ovno           : 0
   +0x01c e_res            : [4] 0
   +0x024 e_oemid          : 0
   +0x026 e_oeminfo        : 0
   +0x028 e_res2           : [10] 0
   +0x03c e_lfanew         : 232

是否可以将缺少的符号添加到 ntdll 的公共符号中,以便我可以在 windbg 调试会话中访问数据结构字段?

这真的很奇怪 - 我尝试了以下方法并在 win7 和 winxp 系统上得到了不同的结果 - 操作系统:

0:015> dt ntdll!*HEADER*
          ntdll!_IMAGE_NT_HEADERS
          ntdll!_IMAGE_FILE_HEADER
          ntdll!_IMAGE_OPTIONAL_HEADER
          ntdll!_SLIST_HEADER
          ntdll!_DISPATCHER_HEADER
          ntdll!_IMAGE_SECTION_HEADER

Win7:

0:000> dt ntdll!*HEADER*
          ntdll!_IMAGE_NT_HEADERS
          ntdll!_IMAGE_FILE_HEADER
          ntdll!_IMAGE_OPTIONAL_HEADER
          ntdll!_IMAGE_DOS_HEADER
          ntdll!_SLIST_HEADER
          ntdll!_DISPATCHER_HEADER
          ntdll!_MM_PAGE_ACCESS_INFO_HEADER
          ntdll!_WHEA_ERROR_RECORD_HEADER
          ntdll!_HEAP_USERDATA_HEADER
          ntdll!_HEAP_USERDATA_HEADER
          ntdll!_WHEA_ERROR_RECORD_HEADER_VALIDBITS
          ntdll!_WHEA_ERROR_RECORD_HEADER_FLAGS
          ntdll!_XSAVE_AREA_HEADER

因此,似乎 _IMAGE_DOS_HEADER 符号已从 winxp 的 ntdll.dll 的公共符号中删除 - 我的问题仍然存在 - 如果我知道我没有的 dll 的公共符号 dll 的结构,我该如何添加符号来源?

【问题讨论】:

    标签: windows debugging windbg


    【解决方案1】:

    您还可以查看这个线程,它显示了如何向其中添加类型

    http://www.woodmann.com/forum/showthread.php?10295-Mysteries-of-win32k-amp-GDI&p=72632&viewfull=1#post72632

    发布 #21

    【讨论】:

    • 链接失效了,帖子已经没用了。
    【解决方案2】:

    发生这种情况,实际上可能非常令人沮丧(尽管他们已经很好地清理了很多这些)。

    可以向现有 PDB 添加类型,但它要求您有可用的 Visual C 编译器(来自 Visual Studio 或 WDK)。我在这里概述了我的回复中的步骤:

    http://www.osronline.com/showthread.cfm?link=193747

    我们在那里使用内核,尽管您有相同的步骤。区别在于:

    1) 寻找 ntdll 而不是 nt

    2) 您需要编写一个包含所需结构定义的 C 文件。

    -斯科特

    【讨论】:

      【解决方案3】:

      它们并没有丢失,只是您没有配置符号路径。 检查下面的 Microsoft KB,如果这不起作用,您可能会遇到更奇怪的问题。

      确保使用符号进行调试的一种方法是使用 lm 命令。 没有调试符号的输出可能如下所示:

      lm
      start    end        module name
      01000000 01014000   notepad    (no symbols)     
      74720000 7476b000   MSCTF      (export symbols)       C:\WINDOWS\system32\MSCTF.dl
      

      而带有调试符号的 lm 的输出将是:

      lm
      start    end        module name
      01000000 01014000   notepad    (pdb symbols)          e:\LocalSymbols\notepad.pdb\15800B8231AF4FDE85232D42B267D3E51\notepad.pdb
      

      【讨论】:

      • 他在列表中看到 一些 类型,这意味着他确实拥有这些符号。没有它们,只有导出的符号可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2020-12-02
      相关资源
      最近更新 更多