C++程序调用IsBadReadPtr或IsBadWritePtr引发内存访问违例问题的排查

news2025/1/19 8:15:16

目录

1、问题描述

2、VS中看不到有效的信息,尝试使用Windbg去分析

3、使用Windbg分析

4、最后


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/125529931       最近在用VS调试程序时老是遇到程序一启动就报错的问题,严重影响软件新功能的开发进度,于是就详细地研究了一下。经分析,发现是因为程序依赖的某个比较老的第三方库调用了IsBadReadPtr和IsBadWritePtr这两个微软已经废弃的老接口导致的。下面将整个问题的分析过程分享出来,以供大家借鉴或参考。 

1、问题描述

        某天,在Visual Studio(以下简称VS)中调试Debug版本程序,刚启动调试就弹出如下的报错提示框:

报出0xC0000005内存访问违例,是在读取某个内存地址时发生了内存读违例(试图去访问一个不应该或者没权限访问的内存)。

       因为当前是在VS中进行Debug调试,所以可以直接切换到call stack函数调用堆栈页面去查看此时的函数调用堆栈:

但并没有看到有效的函数调用堆栈,只能在堆栈中看到异常发生在kernel32.dll系统库模块中。这个有点奇怪,之前几天启动Debug调试时都是正常的,为啥今天突然会报错,并且是必现的。 

2、VS中看不到有效的信息,尝试使用Windbg去分析

        同样的代码,同样的底层dll库,为啥不同时间点表现不一致呢(有时报异常,有时又不报异常)?经尝试发现,在VS的调试状态下,多次按下F5继续运行之后,可以将这个异常跳过去。所以,这个报错不是致命性的异常,是可以跳过去的,然后程序还可以继续运行。

       除了多次按下F5将异常跳过,也可以在弹出的报错提示窗口中,勾除掉“引发此异常类型时中断“,下次就不会再报这类异常了:

       一般当我们在VS中看不到有效的异常上下文信息(比如有效的函数调用堆栈)时,可以尝试使用Windbg直接启动程序或者将Windbg附加到已经运行的目标进程上,看看能否看到有效的函数调用堆栈信息等信息。

       对于本案例,报错是发生在程序启动时,所以需要使用Windbg启动目标程序,这样Windbg才能感知到启动时的异常。因为异常发生在程序启动的过程中,要等目标程序启动起来后再将Windbg附加到目标进程上,时机上就晚了。 

3、使用Windbg分析

       于是用Windbg启动Debug版本的exe程序,启动后,Windbg果然监测到0xC0000005内存访问违例异常,如下所示:

从上图可以看到是调用kernel32!IsBadReadPtr接口触发的,然后输入kn命令查看此时的函数调用堆栈,从堆栈中可以看到是底层的HKCommand模块中的HKGetSerialNum接口中调用了IsBadReadPtr。可以执行g命令将此异常跳过去,但会多次报该异常(应该是多次调用了IsBadReadPtr函数),多次g就可以了。

       对于IsBadReadPtr,有经验的人可能知道这个系统API,同类型的API接口还有IsBadWritePtr。在以前,IsBadReadPtr用来判断目标内存地址是否可读,IsBadWritePtr用来判断目标内存地址是否可写,但现在这两个函数已经被废弃了,已经达不到预定的作用了!可以在微软在线MSDN上查看到这两个API函数的说明:

这两个API函数已经被废弃了,不建议再使用了,这两个函数不能判断出目标地址是否可读可写。

       在本问题中,是HKCommand.dll库中函数内部调用了IsBadReadPtr接口,这个HKCommand.dll库是第三方安全相关的库,这个库比较老(可能是好几年前的库),在老版本库的代码中调用IsBadReadPtr或者IsBadWritePtr是有可能的。

4、最后

       本文简单介绍了由IsBadReadPtr函数调用引发异常的排查过程,整个分析过程也相对比较简单,主要给大家提供一个借鉴或参考。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/386930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-链表-单链表(3)

目录 1. 顺序表的缺陷 2. 单链表 2.1 单链表的基本结构与接口函数 2.2 重要接口 创建新节点的函数: 2.2.1 尾插 2.2.2 头插 2.2.3 尾删 2.2.4 头删 2.2.5 查找 2.2.6 插入 2.2.7 删除 2.2.8 从pos后面插入 2.2.9 从pos后面删除 3. 链表的缺陷与优势&…

传输数据格式:JSON 异步加载

JSON JSON是一种传输数据的格式(以对象为样板,本质上就是对象,但用途有区别,对象就是本地用的,json是用来传输的)JSON.parse();string --> jsonJSON.stringify();json --> string json ---> {n…

关于安卓的一些残缺笔记

安卓笔记Android应用项目的开发过程Android的调试Android项目文档结构Intent的显式/隐式调用Activity的生命周期1个Activity界面涉及到生命周期的情况2个Activity界面涉及到生命周期的情况Android布局的理论讲解Activity界面布局ContentProvider是如何实现数据共享Android整体架…

mysql视图和存储过程

视图视图就是将一条sql查询语句封装起来,之后使用sql时,只需要查询视图即可,查询视图时会将这条sql语句再次执行一遍。视图不保存数据,数据还是在表中。SELECT 语句所查询的表称为视图的基表,而查询的结果集称为虚拟表…

ATTCK v10版本战术实战研究—持久化(一)

一、前言“在网络安全的世界里,白帽子与黑帽子之间无时无刻都在进行着正与邪的对抗,似乎永无休止。正所谓,道高一尺魔高一丈,巨大的利益驱使着个人或组织利用技术进行不法行为,花样层出不穷,令人防不胜防。…

udk2017环境搭建编译步骤

win10 64bit系统 1.参考minnowboard-max-rel-1-01-bin-releasenotes-for-binary-firmware-images.TXT MyWorkspace.rar 解压到c:\,参考txt中的git操作 3.复制ASL,NASM 到c:\ 安装vs2015 ,勾选sdk 5.安装 python-2.7.10.amd64.msi&#xf…

【论文泛读】NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis | NeRF: 用于视图合成的神经辐射场的场景表示 | 2020年 出自文献:Mildenhall B, Srinivasan P P, Tancik M, et al. Nerf: Representing scenes as neural radiance fields for view synth…

泼辣修图Polarr5.11.4 版,让你的创意无限延伸

泼辣修图是一款非常实用的图片处理软件,它不仅拥有丰富的图片处理功能,而且还能够轻松地实现自定义操作。泼辣修图的操作界面非常简洁,功能也非常丰富,使用起来非常方便快捷。 泼辣修图拥有非常丰富的图片处理功能,包括…

【冲刺蓝桥杯的最后30天】day1

大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨‍💻,断更了整整一年,又开始恢复CSDN更新,从今天开始逐渐恢复更新状态,正在备战蓝桥杯的小伙伴可以支持一下哦!…

Rockchip Android13 GKI开发指南

Rockchip Android13 GKI开发指南 文章目录Rockchip Android13 GKI开发指南GKI介绍Google upstream kernel下载及编译Rockchip SDK中GKI相关目录介绍Rockchip GKI编译代码修改编译固件烧写KO编译及修改添加新的模块驱动的方法调试ko方法开机log确认uboot阶段Android阶段KO加载KO…

Java IO流详解

文章目录一、File1.1 构造方法1.2 文件操作 方法1.3 目录操作 方法1.4 文件检测 方法1.5 获取文件信息 方法1.6 应用练习二、IO 流2.1 InputStream 字节输入流 (读)🍓FileInputStream🍓BufferedInputStream2.2 OutputStream 字节输出流 (写)&#x1f34c…

【Redis】redis大key和大value的危害,如何处理?

前序 还记得上次和同事一起去面试候选人时,同事提了一个问题:Redis的大key有什么危害?当时候选人主要作答的角度是一个key的value较大时的情况,比如: 内存不均:单value较大时,可能会导致节点之…

[经验分享]gpt-3.5-Turbo|unity中实现http接口调用gpt新接口以及信息处理的实现案例分享

最近openAI发布了目前chatGPT所使用的模型gpt-3.5-Turbo,之前使用了text-davinci-003模型做了一个galgame的AI女友对话的demo。这次趁着新接口的发布,对这个demo也同步更新了模型调用的代码。本篇文章将分享一下,如何在unity里使用UnityWebRe…

记录一次PWM信号异常问题

问题我使用单片机输出PWM控制机械臂,但是控制过程中,机械臂总是会出现莫名的抽动。利用示波器测试PWM信号,发现信号正常。过程(1)在反复的测试过程中,队友提出,将示波器的地线放在左侧的GND波形…

计算机EI会议论文,和EI期刊论文有什么区别? - 易智编译EaseEditing

EI期刊论文,是期刊论文的一种。顾名思义,就是指发在期刊上的论文。 期刊论文发表的格式需要具体参考各期刊文章的要求学术论文格式,主要会发在月刊/季刊/年刊/不定期的刊上。 目前,国际著名的科技文献检索系统是SCI(…

安卓-AndroidManifest.xml修复

解析编译之后的AndroidManifest文件格式:http://www.520monkey.com/archives/575 案例apk jadx打开发现AndroidManifest.xml异常,无法正常显示 那么我们用apktool反编译试试 apktool d APK逆向-2.apk -f可以看到报错了,显示不能解析此xml…

[SSD科普] 固态硬盘物理接口SATA、M.2、PCIe常见疑问,如何选择?

前言犹记得当年Windows 7系统体验指数中,那5.9分磁盘分数,在其余四项的7.9分面前,似乎已经告诉我们机械硬盘注定被时代淘汰。势如破竹的SSD固态硬盘,彻底打破了温彻斯特结构的机械硬盘多年来在电脑硬件领域的统治。SSD数倍于HDD机…

数据结构 “串“ 的补充提升与KMP算法及其优化的具体实现

❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 ✨精品专栏:C面向对象 🔥系列专栏:数据结构与课程设计 文章目录…

XSS漏洞基本概念

目录 XSS的原理和分类 XSS漏洞分类 dom 存储型 XSS的危害 XSS漏洞的验证 XSS的黑盒测试 XSS漏洞的白盒测试 XSS的原理和分类 xss全称跨站脚本攻击xss(Cross Site Scripting) 为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&am…

MCU实现对外部脉冲信号的计数功能

有的传感器会输出脉冲信号,MCU需要统计脉冲输入的个数,通常有如下实现方式: 1.GPIO中断 原理很简单,利用GPIO的上升沿或者下降沿中断,进中断的次数就是脉冲的个数。只需要在中断服务函数里计数即可。 使用GPIO中断需…