通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃

2023-11-07 09:52

本文主要是介绍通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

C++程序异常调查专栏


文章目录

  • 系列文章目录
  • 前言
  • 一、GFlags是什么?
  • 二、如何获取GFlags
  • 三、使用步骤
    • 1.确认GFlags是否已经安装
    • 2.以管理员权限启动Command prompt
    • 3.GFlags有效设定
    • 4.检查GFlags有效设定是否成功
    • 5.根据客户复现步骤运行程序
  • 总结


前言

客户PC上如果发生程序崩溃,在没有dump、log等调查文件的时候,需要尝试按照客户的步骤去复现该程序崩溃。但往往能够顺利复现的概率很小。针对野指针、内存越界等造成的程序崩溃,利用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:\WINDOWS\system32>cd\
C:\>cd C:\Program Files (x86)\Windows Kits\10\Debuggers\x86
C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>

3.GFlags有效设定

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

gflags.exe /p /enable Aa.exe /full

命令运行后,会有如下提示告诉你设定成功

C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>gflags.exe /p
/enable Aa.exe /full Warning: pageheap.exe is running inside WOW64.
This scenario can be used to test x86 binaries (running inside WOW64)
but not native (IA64) binaries.

path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File
Execution Options
Aa.exe: page heap enabled

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

输入以下命令查看已经设定GFlags有效的程序

 gflags.exe /p

命令运行后,查看设定成功的程序是否和设定的一致

C:\Program Files (x86)\Windows Kits\10\Debuggers\x86>gflags.exe /p
Warning: pageheap.exe is running inside WOW64.
This scenario can be used to test x86 binaries (running inside WOW64)
but not native (IA64) binaries.path: SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution OptionsAa.exe: page heap enabled with flags (full traces )Bb.exe: page heap enabled with flags (full traces )Cc.exe: page heap enabled with flags (full traces )

也可以直接到注册表去查看

SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

注意64位操作系统,注册表地址如下

SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

找到对应的程序,查看其值,设定有效如下
设定有效状态
设定无效如下
设定无效状态

5.根据客户复现步骤运行程序


总结

这篇关于通过GFlags工具来复现因为野指针、内存越界等造成的程序崩溃的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/362849

相关文章

使用Java编写一个字符脱敏工具类

《使用Java编写一个字符脱敏工具类》这篇文章主要为大家详细介绍了如何使用Java编写一个字符脱敏工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、字符脱敏工具类2、测试工具类3、测试结果1、字符脱敏工具类import lombok.extern.slf4j.Slf4j

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加