码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃


    系列文章目录

    C++程序异常调查专栏


    文章目录

    • 系列文章目录
    • 前言
    • 一、GFlags是什么?
    • 二、如何获取GFlags
    • 三、使用步骤
      • 1.确认GFlags是否已经安装
      • 2.以管理员权限启动Command prompt
      • 3.GFlags有效设定
      • 4.检查GFlags有效设定是否成功
        • 4.1 通过命令查看已经设定GFlags有效的程序
        • 4.2 通过注册表查看已经设定GFlags有效的程序
      • 5.复现程序崩溃
      • 6.GFlags无效设定


    前言

    客户PC上如果发生程序崩溃,在现有条件后调查无果,又不能复现的情况下,再推进调查会变得很困难。即使通过分析代码能够推测到原因,但因为不能复现也没办法去验证。如果通过客户的环境去验证,成功则好,不成功的话,加大沟通成本同时也降低了客户的信任度。

    这时候最好的办法还是先想办法去复现该程序崩溃。针对野指针、内存越界等造成的程序崩溃,利用GFlags工具能够显著的提高复现的几率。


    一、GFlags是什么?

    GFlags 是全局标志编辑器,用于启用和禁用高级调试、诊断和故障排除功能。驱动程序开发人员和测试人员通常使用 GFlags 直接或通过在测试脚本中包含 GFlags 命令来启用调试、日志记录和测试功能。页堆验证功能可帮助你识别 内核模式 驱动程序中的内存泄漏和缓冲区错误。

    GFlags 具有对话框和命令行接口。 这两个接口提供大多数功能,但某些功能只能从其中一个接口访问。

    二、如何获取GFlags

    GFlags.exe 包含在WinDbg调试工具中。

    WinDbg官网下载

    安装WinDbg调试工具后,默认在以下目录中安装 64 位版本的 gflags.exe 。
    C:\Program Files(x86)\Windows Kits\10\Debuggers\x64

    如果运行的是 32 位版本的 Windows,请使用位于此处的 32 位版本的 gflags.exe :
    C:\Program Files(x86)\Windows Kits\10\Debuggers\x86

    三、使用步骤

    1.确认GFlags是否已经安装

    进入安装目录去确认

    2.以管理员权限启动Command prompt

    以管理员权限启动Command prompt启动后,移动到GFlags的安装目录
    C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>
    在这里插入图片描述

    3.GFlags有效设定

    输入以下命令设置程序的GFlags有效,如果要设置多个程序,依次输入以下命令即可。

    gflags.exe /p /enable aa.exe /full
    
    • 1

    命令运行后,以下消息则表示该程序的GFlags设定成功

    aa.exe: page heap enabled
    
    • 1

    在这里插入图片描述

    4.检查GFlags有效设定是否成功

    4.1 通过命令查看已经设定GFlags有效的程序

    输入以下命令查看程序的GFlags是否有效

     gflags.exe /p
    
    • 1

    命令运行后,查看设定成功的程序是否和预期一致
    在这里插入图片描述

    4.2 通过注册表查看已经设定GFlags有效的程序

    注册表地址

    32位操作系统
    SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    
    64位操作系统
    SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上述地址展开后找到指定程序,在右侧查看其值的内容
    设定有效
    设定有效状态
    设定无效
    设定无效状态

    5.复现程序崩溃

    在GFlags设定有效的状态下,按照客户提供的复现步骤,再尝试复现程序的崩溃。复现后,再结合其他方法去定位问题。

    6.GFlags无效设定

    问题调查完后,把相应的GFlags设定无效,回到调查的状态。
    输入以下命令设置程序的GFlags无效,如果要设置多个程序,依次输入以下命令即可。

    gflags.exe /p /disable aa.exe
    
    • 1

    命令运行后,以下消息则表示该程序的GFlags无效设定成功

    aa.exe: page heap disabled
    
    • 1

    在这里插入图片描述


  • 相关阅读:
    java毕业设计家校通管理系统mybatis+源码+调试部署+系统+数据库+lw
    算法实战:亲自写红黑树之二 完整代码
    芯科蓝牙BG27开发笔记9-资料整理
    比nestjs更优雅的ioc:跨模块访问资源
    【智能优化算法-蒲公英优化器】基于蒲公英优化器求解单目标优化问题附matlab代码
    C++入门应该注意的问题(内联函数和C的宏)
    怎么看SSL证书是不是自签名证书?
    智能振弦传感器:参数智能识别技术的重要科技创新
    TSINGSEE青犀AI视频分析/边缘计算/AI算法·人脸识别功能——多场景高效运用
    Symfony CSRF 教程
  • 原文地址:https://blog.csdn.net/xiaofeizai1116/article/details/134249028
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号