什么是符号

符号文件包含大量的数据,这些数据在运行二进制文件时实际上并不需要,但在调试过程中很有用。

  • 符号与二进制文件中的raw bytes 一一对应
    • 变量,函数,结构体,等等
  • 符号文件存储在PDB文件中
    • 在镜像文件构建(编译+链接)时候生成
  • PDB文件通常还包含其他符号信息(私有符号&公开符号)
  • windows的符号文件放在微软公共符号服务器上

    配置符号

  • 普通程序:

    • 把pdb文件和镜像文件放到相同目录
    • 或者手动指定符号文件目录
  • windows binaries

    • 使用环境变量 _NT_SYMBOL_PATH 设置
    • 设置为 srvc:\MyServerSymbolshttps://msdl.microsoft.com/download/symbols
    • 很多工具都是查找此环境变量找到windows 的符号
      1. set _NT_SYMBOL_PATH=srv*DownstreamStore*https://msdl.microsoft.com/download/symbols
  • 或者使用 .symfix 命令让windbg 自动创建符号目录

    1. .symfix+ C:\MySymbols

在windbg中设置
image.png
image.png

  1. lm 列出加载模块

image.png

  1. 使用 .reload -f wow64.dll 强制下载加载符号

image.png