WinDbg学习二(符号)

这篇具有很好参考价值的文章主要介绍了WinDbg学习二(符号)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在开始使用WinDbg之前,我们需要设置一下符号。

简介

符号文件包含大量的数据,比如全局变量,局部变量,源行号,这些数据在运行二进制文件时实际上并不需要,但在调试过程中很有用,比如我们写.net程序时生成的PDB文件。

符号可以包括名称、类型(如果适用)、存储地址或寄存器以及任何父符号或子符号。 符号示例包括变量名(本地和全局)、函数以及模块的任何入口点。

调试器从位于本地文件系统的或从远程符号服务器加载的符号文件中获取其有关符号的信息。 使用符号服务器时,调试器将自动使用正确的符号文件版本来匹配目标中的模块。

如果要执行我们自己程序的调试,则需要我们程序的符号。 如果要执行内核模式调试或者依赖的Windwos库,则需要要这些库的符号以及 Windows 公共符号。

符号服务器

符号服务器使调试器能够自动从符号存储(符号文件的索引集合)检索正确的符号文件,用户无需知道产品名称、版本或内部版本号。 Windows 调试工具包括所需的 dll 符号服务器 SymSrv。

Microsoft 符号服务器使 Windows 调试程序符号公开可用。

设置符号符号器

  1. 首先在自己电脑D盘建一个WinDbg目录,在建立一个PublicSymbol目录和Cache目录。
  2. 在WinDbg中设置
    WinDbg学习二(符号)

具体为什么这样设置,可以参考(https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/advanced-symsrv-use)

运用

  1. 打开记事本
  2. WinDbg挂载
    文件-Attach to process,找到记事本的进程,然后双击
    WinDbg学习二(符号)

可以看到已经附加到记事本进程上了
WinDbg学习二(符号)

DbgBreakPoint是一个C++函数,如果安装了内核调试程序,此例程将引发一个异常,该异常由内核调试器处理;否则,它由调试系统处理。 如果调试器未连接到系统,则可以以标准方式处理异常。

显示当前路径设置

0:003> .sympath 
Symbol search path is: srv*D:\WinDbg\PublicSymbol*https://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*d:\windbg\publicsymbol*https://msdl.microsoft.com/download/symbols

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*D:\WinDbg\PublicSymbol*https://msdl.microsoft.com/download/symbols

符号选项

显示当前设置

0:006> .symopt
Symbol options are 0x30337:
  0x00000001 - SYMOPT_CASE_INSENSITIVE
  0x00000002 - SYMOPT_UNDNAME
  0x00000004 - SYMOPT_DEFERRED_LOADS
  0x00000010 - SYMOPT_LOAD_LINES
  0x00000020 - SYMOPT_OMAP_FIND_NEAREST
  0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
  0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
  0x00010000 - SYMOPT_AUTO_PUBLICS
  0x00020000 - SYMOPT_NO_IMAGE_SEARCH

删除选项

0:006> .symopt- 1
Symbol options are 0x30336:
  0x00000002 - SYMOPT_UNDNAME
  0x00000004 - SYMOPT_DEFERRED_LOADS
  0x00000010 - SYMOPT_LOAD_LINES
  0x00000020 - SYMOPT_OMAP_FIND_NEAREST
  0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
  0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
  0x00010000 - SYMOPT_AUTO_PUBLICS
  0x00020000 - SYMOPT_NO_IMAGE_SEARCH

增加选项

0:006> .symopt+ 1
Symbol options are 0x30337:
  0x00000001 - SYMOPT_CASE_INSENSITIVE
  0x00000002 - SYMOPT_UNDNAME
  0x00000004 - SYMOPT_DEFERRED_LOADS
  0x00000010 - SYMOPT_LOAD_LINES
  0x00000020 - SYMOPT_OMAP_FIND_NEAREST
  0x00000100 - SYMOPT_NO_UNQUALIFIED_LOADS
  0x00000200 - SYMOPT_FAIL_CRITICAL_ERRORS
  0x00010000 - SYMOPT_AUTO_PUBLICS
  0x00020000 - SYMOPT_NO_IMAGE_SEARCH

选项参数

名称 描述
0x1 SYMOPT_CASE_INSENSITIVE 符号名称不区分大小写
0x2 SYMOPT_UNDNAME 符号名称未修饰
0x4 SYMOPT_DEFERRED_LOADS 延迟加载
0x8 SYMOPT_NO_CPP 关闭C++转换,C++中的::符号将以__显示
0x10 SYMOPT_LOAD_LINES 从源文件中加载行号
0x20 SYMOPT_OMAP_FIND_NEAREST 如果由于编译器优化导致找不到对应的符号,就以最近的一个符号代替之
0x40 SYMOPT_LOAD_ANYTHING 使得符号匹配的时候,匹配原则较松散,不那么严格
0x80 SYMOPT_IGNORE_CVREC 忽略镜像文件头中的CV记录
0x100 SYMOPT_NO_UNQUALIFIED_LOAD 只在已加载模块中搜索符号,如果搜索符号失败,不会自动加载新模块。
0x200 SYMOPT_FAIL_CRITICAL_ERRORS 不显示文件访问错误对话框
0x400 SYMOPT_EXACT_SYMBOLS 进行最严格的符号文件检查,只要有微小的差异,符号文件都不会被加载
0x800 SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 允许从内存的一个绝对地址处读取符号信息
0x1000 SYMOPT_IGNORE_NT_SYMPATH 忽视在环境变量中设置的符号路径
0x2000 SYMOPT_INCLUDE_32BIT_MODULES 让运行在安腾系统上的调试器,也枚举32位模块
0x4000 SYMOPT_PUBLICS_ONLY 仅搜索符号文件的公共(PUBLIC)符号表,忽略私有符号表。
0x8000 SYMOPT_NO_PUBLICS 不搜索符号文件的公共(PUBLIC)符号表
0x10000 SYMOPT_AUTO_PUBLICS 先搜索pdb文件的私有符号表,如果在其中找到对应的符号,就不再搜索公共(PUBLIC)符号表,这可以加快搜索速度
0x20000 SYMOPT_NO_IMAGE_SEARCH 不搜索镜像拷贝
0x40000 SYMOPT_SECURE 安全模式,让调试器尽量不影响到主机
0x80000 SYMOPT_NO_PROMPTS 不显示符号代理服务器的认证对话框,将导致某些时候无法访问符号服务器
0x80000000 SYMOPT_DEBUG 显示符号搜索的详细过程和信息

符号加载

查看模块及模块符号的加载情况(lm)

0:003> lm
start             end                 module name
00007ff6`1ae50000 00007ff6`1ae88000   NOTEPAD    (pdb symbols)          d:\windbg\publicsymbol\notepad.pdb\5A096A6EA0DB6F42E516FC1B12C514EE1\notepad.pdb
00007ff9`c5dc0000 00007ff9`c5e9d000   efswrt     (deferred)             
00007ff9`cc2c0000 00007ff9`cc36c000   TextShaping   (deferred)             
00007ff9`ce5d0000 00007ff9`ce6ca000   textinputframework   (deferred)             
00007ff9`d0010000 00007ff9`d0104000   MrmCoreR   (deferred)             
00007ff9`d5f60000 00007ff9`d614d000   urlmon     (deferred)             
00007ff9`d7250000 00007ff9`d74ea000   COMCTL32   (deferred)             
00007ff9`ded40000 00007ff9`deffc000   iertutil   (deferred)             
00007ff9`e8b30000 00007ff9`e8b59000   srvcli     (deferred)             
00007ff9`e8c40000 00007ff9`e8c5d000   MPR        (deferred)             
00007ff9`e9c10000 00007ff9`e9e17000   twinapi_appcore   (deferred)             
00007ff9`ebc90000 00007ff9`ebcf6000   oleacc     (deferred)             
00007ff9`ed210000 00007ff9`ed306000   PROPSYS    (deferred)             
00007ff9`ed320000 00007ff9`ed3c1000   policymanager   (deferred)             
00007ff9`ee160000 00007ff9`ee2b5000   wintypes   (deferred)             
00007ff9`eeb90000 00007ff9`eec82000   CoreMessaging   (deferred)             
00007ff9`eec90000 00007ff9`eefee000   CoreUIComponents   (deferred)             
00007ff9`ef900000 00007ff9`ef99e000   uxtheme    (deferred)             
00007ff9`f0420000 00007ff9`f0bbb000   windows_storage   (deferred)             
00007ff9`f0bd0000 00007ff9`f0be2000   kernel_appcore   (deferred)             
00007ff9`f14a0000 00007ff9`f152a000   msvcp110_win   (deferred)             
00007ff9`f1530000 00007ff9`f1563000   ntmarta    (deferred)             
00007ff9`f1880000 00007ff9`f188c000   netutils   (deferred)             
00007ff9`f1d50000 00007ff9`f1d7e000   Wldp       (deferred)             
00007ff9`f23f0000 00007ff9`f243e000   CFGMGR32   (deferred)             
00007ff9`f24f0000 00007ff9`f27e6000   KERNELBASE   (deferred)             
00007ff9`f27f0000 00007ff9`f290a000   gdi32full   (deferred)             
00007ff9`f2940000 00007ff9`f2a40000   ucrtbase   (deferred)             
00007ff9`f2ab0000 00007ff9`f2ad2000   win32u     (deferred)             
00007ff9`f2ae0000 00007ff9`f2b7d000   msvcp_win   (deferred)             
00007ff9`f2ce0000 00007ff9`f2d62000   bcryptPrimitives   (deferred)             
00007ff9`f2d70000 00007ff9`f2e2d000   KERNEL32   (pdb symbols)          d:\windbg\publicsymbol\kernel32.pdb\C8DEC0DDA0E2EF5C882CC32F0AF2F80B1\kernel32.pdb
00007ff9`f2e30000 00007ff9`f2e5c000   GDI32      (deferred)             
00007ff9`f2e60000 00007ff9`f2f74000   MSCTF      (deferred)             
00007ff9`f3130000 00007ff9`f3185000   shlwapi    (deferred)             
00007ff9`f3190000 00007ff9`f322e000   msvcrt     (deferred)             
00007ff9`f3230000 00007ff9`f32d9000   clbcatq    (deferred)             
00007ff9`f32e0000 00007ff9`f338e000   ADVAPI32   (deferred)             
00007ff9`f3390000 00007ff9`f342c000   sechost    (deferred)             
00007ff9`f3490000 00007ff9`f35ba000   ole32      (deferred)             
00007ff9`f35c0000 00007ff9`f35f0000   IMM32      (deferred)             
00007ff9`f3600000 00007ff9`f36ad000   shcore     (deferred)             
00007ff9`f36b0000 00007ff9`f37d6000   RPCRT4     (deferred)             
00007ff9`f3800000 00007ff9`f399e000   USER32     (deferred)             
00007ff9`f39a0000 00007ff9`f3a7a000   COMDLG32   (deferred)             
00007ff9`f3b90000 00007ff9`f3bfb000   WS2_32     (deferred)             
00007ff9`f3c00000 00007ff9`f3ccd000   OLEAUT32   (deferred)             
00007ff9`f3cf0000 00007ff9`f4044000   combase    (deferred)             
00007ff9`f4050000 00007ff9`f4795000   SHELL32    (deferred)             
00007ff9`f4d10000 00007ff9`f4f08000   ntdll      (pdb symbols)          d:\windbg\publicsymbol\ntdll.pdb\DF7907287B0D7132B3C4A5D82B567E9E1\ntdll.pdb

deferred:表示为延迟加载。
默认情况下,在加载目标模块时不会实际加载符号信息。 相反,调试器会根据需要加载符号
可以使用.reload /f强制即刻加载文章来源地址https://www.toymoban.com/news/detail-821113.html

查看已加载模块符号的模块(lm l)

0:003> lm l
start             end                 module name
00007ff6`1ae50000 00007ff6`1ae88000   NOTEPAD    (pdb symbols)          d:\windbg\publicsymbol\notepad.pdb\5A096A6EA0DB6F42E516FC1B12C514EE1\notepad.pdb
00007ff9`f2d70000 00007ff9`f2e2d000   KERNEL32   (pdb symbols)          d:\windbg\publicsymbol\kernel32.pdb\C8DEC0DDA0E2EF5C882CC32F0AF2F80B1\kernel32.pdb
00007ff9`f4d10000 00007ff9`f4f08000   ntdll      (pdb symbols)          d:\windbg\publicsymbol\ntdll.pdb\DF7907287B0D7132B3C4A5D82B567E9E1\ntdll.pdb

查看所有模块及详细信息(lm v)

到了这里,关于WinDbg学习二(符号)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【WinDbg】学习以及在CTF中解题

    WinDbg是一款Windows强大的调试器,可以调试0和3环的程序。 在实际开发中,可以调试我们的错误程序,从而定位关键代码,进行程序代码修复。 WinDbg 是一种调试器工具,由微软公司开发,用于分析和调试 Windows 操作系统和应用程序。它提供了强大的调试功能,可以帮助开发人

    2024年02月04日
    浏览(45)
  • WinDbg学习三(字符串通配符语法)

    星号(*) 代表零个或多个字符。 问号(?) 代表任意单个字符。 包含字符列表的方括号( [ ] ) 代表列表中的任何单个字符。 恰好匹配列表中的一个字符。 在这些括号内,您可以使用连字符 (-) 指定范围。 例如,Prog[er-t7]am 匹配“Progeam”、“Program”、“Progsam”、“Progtam”和“P

    2024年01月25日
    浏览(43)
  • nuxt3:我们开始吧-开发-配置-部署

    一、背景介绍 2022 年 11 月 16 日,全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行,并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于  Vite 、 Vue3  和  Nitro  的 Nuxt 框架的现代重写,具有一流的 Typescript 支持,是两年多研究、社区反馈、创新和实验的结果。为每个人提供了

    2023年04月12日
    浏览(45)
  • 从0开始学Java:运算符(Operator)与标点符号(Separators)

    运算符: 是一种特殊的符号,用以表示数据的运算、赋值和比较等。 表达式: 用运算符连接起来的式子 在Java中,一共有38个运算符。 按照功能划分: 分类 运算符 算术运算符 + 、 - 、 * 、 / 、 % 、 ++ 、 -- 赋值运算符 = 、 += 、 -= 、 *= 、 /= 、 %= 等 关系运算符 、 = 、 、

    2024年02月08日
    浏览(50)
  • 讯飞版ChatGPT突然开始内测!我们连夜一手实测

    明敏 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 科大讯飞版ChatGPT产品,提前交卷了! 就在昨夜,讯飞骤然向开发者提供了内测通道,取名为 讯飞星火认知大模型 对外开启内测。 还有个神奇的英文名字Spark Desk,据说有“火花桌面智能助手”的意思。 讯飞这波操作,多少有点“

    2024年02月01日
    浏览(46)
  • 使用Windbg过程中两个使用细节分享

           我们在使用工具的过程中,一般都会遇到一些使用上的细节或者技巧,今天就来给大家分享一下最近使用Windbg过程中遇到的两个问题,以供参考。   VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...) https://blog.csdn.net/chenlycly/article/details/124272585

    2024年02月09日
    浏览(37)
  • 从零开始训练 YOLOv8最新8.1版本教程说明(包含Mac、Windows、Linux端 )同之前的项目版本代码有区别

    从零开始训练 YOLOv8 - 最新8.1版本教程说明 本文适用Windows/Linux/Mac:从零开始使用Windows/Linux/Mac训练 YOLOv8 算法项目 《芒果 YOLOv8 目标检测算法 改进》 适用于芒果专栏改进 YOLOv8 算法 官方 YOLOv8 算法 第一步 配置环境 首先 点击这个链接 https://github.com/ultralytics/ultralytics/tree/v8.1

    2024年01月25日
    浏览(64)
  • 我们都低估了GPT-4,它才是梦开始的地方

    从今年开始 最近这两个月 AI技术带来的冲击一个接一个 我们的团队都在忙着研究各种AI 性能力这个方面 还真不如自己马上上手 用这些软件感受来的那么强烈 我觉得至少有几个产品 大家可以去试一下 第一 大家赶紧去看一个church GBT plus的账号 然后亲身体验一下GPT4的底层能力

    2023年04月12日
    浏览(39)
  • AI 图像生成工具可以取代摄影师吗?让我们从原理开始聊聊

    AI 的风已经吹向了每一个人,在这篇文章中我们一起来聊一聊 AI 图像生成的原理以及未来。 作为一个非职业的摄影爱好者,我通常会在 Instagram 上面搜罗各种各样的优质图片并将其放进我的收藏夹。其中,有一位我关注了很久的德国摄影师,他的作品有很多值得我学习的地方

    2024年02月03日
    浏览(45)
  • 使用Windbg静态分析dump文件的一般步骤详解

    目录   1、概述 2、静态分析dump文件的一般步骤 2.1、查看异常类型

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包