WinDBG加载符号表的一点心得体会

WinDBG无法加载符号表是很痛苦的事情,明明符号表的路径已经加载进去了,可是还是无法加断点,下面直接进入主题:

符号表无法加载,无法触发断点。

1、检查sympath是否正确

kd> .sympath
Symbol search path is: srv*http://msdl.microsoft.com/download/symbols;C:\Windows\symbols;D:\VSSDataBase\TrueCrypt\Driver\obj_driver_debug\i386
Expanded Symbol search path is: srv*http://msdl.microsoft.com/download/symbols;c:\windows\symbols;d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386

之前的尝试,以为符号表的路径在前面和在后面关系很大,毕竟是依次查找路径的嘛,只要查找正确了,路径前后和符号表在什么位置又有什么关系呢。

src*与;之前的区别:src*是符号表服务器上找,而;是去本地路径上去找,对于一台机子来说就一样的。

2、!lmi truecrypt查找相应的模块信息

kd> !lmi truecrypt
Loaded Module Info: [truecrypt] 
         Module: truecrypt
   Base Address: ee21b000
     Image Name: truecrypt.sys
   Machine Type: 332 (I386)
     Time Stamp: 4d889673 Tue Mar 22 20:30:43 2011
           Size: 4ef80
       CheckSum: 55776
Characteristics: 102  
Debug Data Dirs: Type  Size     VA  Pointer
             CODEVIEW    5c, 43fc8,   43fc8 RSDS - GUID: {1B9489BA-E47D-4E48-89EB-D0CB60055F22}
               Age: 1, Pdb: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb
     Image Type: MEMORY   - Image read successfully from loaded memory.
    Symbol Type: EXPORT   - PDB not found
    Load Report: export symbols



Symbol Type: EXPORT   - PDB not found 符号表没有找到
Export
没有发现符号文件,使用映像文件的输出信息(如DLL的Export)作为符号
3、检查符号表加载详细情况
!sym noisy
当Windbg加载Symbol文件的时候,显示Symbol的路径,默认情况下是不显示的。
YMSRV:  无法与服务器建立连接
SYMSRV:  c:\windows\symbols\truecrypt.pdb\1B9489BAE47D4E4889EBD0CB60055F221\truecrypt.pdb not found
!sym quiet 不显示路径
SYMSRV: truecrypt.pdb not found

kd> !sym noisy
noisy mode - symbol prompts on

kd> .reload /f truecrypt.sys
SYMSRV: 无法与服务器建立连接
SYMSRV: c:\windows\symbols\truecrypt.pdb\1B9489BAE47D4E4889EBD0CB60055F221\truecrypt.pdb not found
SYMSRV: http://msdl.microsoft.com/download/symbols/truecrypt.pdb/1B9489BAE47D4E4889EBD0CB60055F221/truecrypt.pdb not found
DBGHELP: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb - mismatched pdb
DBGHELP: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\sys\truecrypt.pdb - file not found
DBGHELP: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\symbols\sys\truecrypt.pdb - file not found
SYMSRV: 无法与服务器建立连接
SYMSRV: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb\1B9489BAE47D4E4889EBD0CB60055F221\truecrypt.pdb not found
SYMSRV: c:\windows\symbols\truecrypt.pdb\1B9489BAE47D4E4889EBD0CB60055F221\truecrypt.pdb not found
SYMSRV: http://msdl.microsoft.com/download/symbols/truecrypt.pdb/1B9489BAE47D4E4889EBD0CB60055F221/truecrypt.pdb not found
DBGHELP: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb - mismatched pdb
DBGHELP: Couldn't load mismatched pdb for truecrypt.sys
*** ERROR: Symbol file could not be found. Defaulted to export symbols for truecrypt.sys -
DBGHELP: truecrypt - export symbols


注意上面那一行,符号表的位置是正确的,也找对了,但是结果却是mismatched pdb,于是我就将debug目录下内容,删除后重新生成,并拷贝到虚拟机里,结果仍然是一样的,
仍然是mismatched pdb。
4、模块详情对照
!IToldYouSo tests the validity of a module against a symbol file.The module can be specified by either its name or base address.If a symbol file is not specified, then the loaded symbol is tested.
Otherwise, if a pdb or dbg symbol file path is specified, it is tested against the loaded module.

kd> !itoldyouso truecrypt d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb

truecrypt.sys
    Timestamp: 4D889673
  SizeOfImage: 4EF80
          pdb: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb
      pdb sig: 1B9489BA-E47D-4E48-89EB-D0CB60055F22
          age: 1

truecrypt.pdb
      pdb sig: 329A35FA-70B8-4A97-BB0E-99BA6342AB6A
          age: 1

sig MISMATCH: truecrypt.pdb and truecrypt.sys



签名不一样,结果说明我虚拟机里装载的驱动和我重新生成的符号表不一致。经过检查发现,truecrypt.exe启动时候装载的truecrypt.sys并不是在C:\Windows\System32\Drivers下面,
而是在truecrypt.exe本身的安装目录下,替换之后,已经能够成功装载符号表了。
如下:

kd> !lmi truecrypt
Loaded Module Info: [truecrypt] 
         Module: truecrypt
   Base Address: ee1ef000
     Image Name: truecrypt.sys
   Machine Type: 332 (I386)
     Time Stamp: 4d8c8e61 Fri Mar 25 20:45:21 2011
           Size: 4f180
       CheckSum: 5b7fa
Characteristics: 102  
Debug Data Dirs: Type  Size     VA  Pointer
             CODEVIEW    5c, 44148,   44148 RSDS - GUID: {160409E4-8EFC-4412-B760-4E9BF8F1A05A}
               Age: 1, Pdb: d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb
     Image Type: MEMORY   - Image read successfully from loaded memory.
    Symbol Type: PDB      - Symbols loaded successfully from symbol search path.
                 d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb
       Compiler: Resource - front end [0.0 bld 0] - back end [9.0 bld 30729]
    Load Report: private symbols & lines, not source indexed 
                 d:\vssdatabase\truecrypt\driver\obj_driver_debug\i386\truecrypt.pdb

转载于:https://www.cnblogs.com/YaoHearthStone/p/3477270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Windbg 是一种在 Windows 操作系统下进行调试的工具,可以帮助开发人员识别并解决程序中的错误。由于 Windows 使用符号(Symbol tables)来存储可执行文件和模块文件中的符号名称和地址信息,所以为了更准确地调试程序,我们需要下符号Windbg 自带了一个命令行程序名为 SymChk,它可以搜索符号服务器以获取可执行文件和程序库的符号。下面是下符号的步骤: 1. 打开 Windbg。 2. 在 Windbg 中打开需要调试的程序。此时,Windbg 可能会提示无法符号文件。 3. 在 Windbg 的命令行界面中,输入以下命令: .sympath SRV*c:\symbols*http://msdl.microsoft.com/download/symbols 其中,c:\symbols 是本地符号目录,通常情况下是新建一个空文件夹作为符号目录;http://msdl.microsoft.com/download/symbols 是微软的符号服务器地址。 4. 输入以下命令以开始下符号: .symfix c:\symbols 这个命令是告诉 Windbg符号文件存储到指定的符号目录。 5. 最后,在 Windbg 的命令行中输入命令: .reload /f 这个命令告诉 Windbg 重新程序和所有的符号文件。 完成上述步骤之后,Windbg 就可以正确地显示程序的符号信息了。需要注意的是,如果程序使用的是自定义的符号文件而不是 Microsoft 的符号文件,则需要将符号文件添符号路径中。 ### 回答2: Windbg是Microsoft Windows操作系统上一种强大的调试工具,能够帮助开发者/程序员追踪和解决程序在运行时出现的各种问题。在进行Windbg调试的过程中,符号显得尤为重要。符号是一种包含源代码、二进制代码和调试信息的文件,它可以帮助调试器将二进制代码映射到源代码的行数和函数名上。 在Windbg中下符号有以下几个步骤: 第一步:打开Windbg,按"F12"键打开"命令"窗口。 第二步:在"命令"窗口中输入下列命令之一,以下目标文件的符号: - .symfix c:\symbols:将符号到c盘上的symbols文件夹中。 - .sympath+ C:\path_to_your_symbols:在已有的符号路径中添一个路径。 - .symproxy (proxy server):(port):在符号路径前面添代理。 第三步:输入"!sym noisy"命令可以打开符号的详细输出,并且确认符号正在进行。 第四步:下完成后,在Windbg的左部窗口"Modules"中选择想要观察的模块,右键点击该模块,在弹出的菜单中选择"Symbol Load Information",即可查看符号的情况。 通过以上步骤,我们可以轻松下符号,并且在调试程序时得到更准确和详细的调试信息,从而更好地定位和解决程序的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值