• WinDbg调试:配置和查看符号


    设置符号路径

    利用环境变量设置符号路径

    在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>
  • 相关阅读:
    电子公文传输系统-个人贡献
    电子公文传输系统团队项目 冲刺总结
    2020课程设计——个人报告
    2020课程设计——小组报告
    电子公文传输系统团队项目 描述设计
    OpenSSL中的dgst、dh、dhparam、enc命令使用说明
    用OpenSSL搭建的CA配置tomcat,部署https网站
    2020课程设计——第三周进展
    myod-系统调用版本
    20181312 2020-2021-1 《信息安全系统设计与实现(上)》用myod实现Linux下od -tx -tc功能
  • 原文地址:https://www.cnblogs.com/lidabo/p/14381068.html
Copyright © 2020-2023  润新知