跟踪访问冲突Access Violation的位置

vb制作单片机 上位机 (1) 控制单个电灯开关 vb制作单片机 上位机 (1) 控制单个电灯开关vb制作单片机 上位机 1 控制单个电灯开关 单片机源码 vb上位机程序编写 vb程序 基本构造 vb源码单片机源码#include <reg52.h> sbit led = P1^0; // led灯为P1^0 void init(void){ SCON = 0X50; //设置usp串口中断寄存器 TMOD = 0X20; //设置 阅读详情

 

 

Tracking Down the Location of Some AVs

跟踪访问冲突AVs的位置

如果一个AV的起因源自于试图访问没有初始化的类的属性(或方法),在没有多少代码的情况下这是很容易识别的。但另一方面如果有一大堆代码时,或者AV出现在多次重复的循环体中的话,就相当有难度了。幸运的是,(C++Builder内或外的)AV的错误信息是通过窗口显示的。这有助于辨别由于非法内存访问引起的错误。有两件事必须在头脑中牢记:a)别让十六进制的符号吓倒你。b)更别害怕CPU窗口。

考虑如下的代码段:

TEdit *EditBox;
EditBox->AutoSelect = false;

这在语法上似乎是正确的,事实上编译器也不会报错。当然,问题在运行时就会暴露出来。运行时,会得到类似"Access Violation at (someaddress) in module Vcl40.bpl. Read of address 000001F4."的错误,试试看。

发生什么了?Ok,在内存中一个对象(object)与数组是非常相似的。我们最好还是先看看一个数组吧。考虑如下的代码段:

int myIntegerArray[10];
myIntegerArray[0] = 6;
myIntegerArray[1] = 88

当我们为(myIntegerArray[0])的第一个位置赋值时,我们实际上先将编译器为“myIntegerArray”分配的内存位置设为0。再将6移到这个内存位置。然后好心的编译器又分配(保留)了下9个int大小的内存单元准备给我们使用。所以,当我们给myIntegerArray[1]赋值88时,我们实际上在myIntegerArray指定的位置增加了sizeof(int)大小,再将88填入。一般的,myIntegerArray[n]可以被认为是myIntegerArray + (n*sizeof(int))。

实体(n*sizeof(int))可以(也应该)被想像为一个“偏移”(offset)。

这跟访问冲突access violations有什么关系呢?

 前面'read of address'  的值(000001F4 and 000001F5)是来自EditBox的偏移! 回顾前面的代码片断,好心的C++Builder自动将EditBox初始化为0。当我们试图访问EditBox的一个属性时,我们实际上在类的基指针上加上了属性的偏移值(就象前面的数组一样)。但此时基指针的值为0!由于00000000 + AutoSelect 的偏移(000001F4)不是用户允许访问的绝对内存地址,我们得到了一个AV。

我们如何依据这些信息来解决AV?

首先也是最重要的,前面的介绍应该增加了您对各种AV的综合理解。其次,在AV消息框中提供的信息可以用来隔离导致问题的高级语言代码。下面就是详细的步骤:

1.) 记录下AV发生的地址。就是前面所讲的'(someaddress)'。

2.) 在运行的第一个构造函数处设置断点 (工程的主窗体main form)。

3.) 运行工程。

4.) 当程序在断点处锁住时按下ctrl-alt-c,弹出CPU窗口。

5.) 在左上角的包含了汇编代码的区域右击鼠标。

6.) 从弹出菜单中选择'Goto Address'

7.)在弹出窗口的'Enter Address To Position To'处填入'0x(someaddress)'并回车

使用前面的Tedit例子您将会看到:

vcl40.@Stdctrls@TCustomEdit@SetAutoSize$qqr4bool

意义很简单。我们正处在vcl40模块内并试图访问TCustomEdit+SetAutoSize 。 现在就可以开始隔离引起AV的罪魁祸首了。只需在TcustomEdit对象中排除啦。由于访问的是AutoSize属性。当你找到这些的时候,基本上可以肯定了你已经找到了引起Av的高级代码了!

现在快抓住这个肮脏的AVs!

CKER@SINA.COM

VB.net上位机实现串口通讯(入门) PC自发自收,把USB TO TTL的rxd和txd短路,下拉列表框选择串口,在文本框1中输入文本,点击发送,发送给串口接受并反馈回PC显示在文本框2上。(有个bug,你必须选对串口,如果你插了别的什么东西,你选错了串口,ok,GG,选对就没事你可以考虑一下如何优化代码解决这个问题,哥们我懒得改了) 阅读详情

相关推荐

VB数据库连接实战:从ADO到DataGrid的完整开发手册

做了十几年VB开发,最让人头疼的不是界面怎么画,而是数据怎么存、怎么取、怎么绑。很多人一听到数据库连接就犯怵,觉得要装驱动、写SQL、调连接字符串,光这些就够劝退一波人了。但实际上,VB6自带的ADO组件已经把这条路铺得很平了。今天这篇文章,我把自己在项目里摸爬滚打总结出来的数据库连接实战经验,从连接、查询、增删改到数据绑定,一次性给你讲透。不说废话,全是能直接拿去用的东西。

Start_mswin的博客 320

[C++builder调试问题]Access Violation问题

---恢复内容开始--- 使用C++ builder后,发现很容易出现Access Violation的问题 形如: 当一个运行期Access violation出现时,你的用户得到的错误信息类似于如下情况: Access violation at address <十六进制值> in module <应用程序名&gt...

aisin1231的博客 1836

汽车底盘技术解析:从悬架调校到智能化,如何评价国产车底盘实力

汽车底盘作为决定车辆驾驶质感、安全性和耐久性的核心系统,其技术内涵远不止于悬架结构。从行驶系、转向系到制动系的协同工作,底盘调校是一门融合机械原理与工程实践的艺术。在电动化与智能化浪潮下,底盘技术正经历从被动适应到主动响应的变革,CDC可变阻尼减震器和空气悬架等技术的应用,让底盘具备了通过OTA升级实现性能优化的可能。国产汽车品牌如奇瑞、吉利等,通过平台化架构研发与调校经验积累,正推动底盘技术从“能用”向“好用”乃至“塑造独特驾驶风格”迈进。理解底盘技术,需超越简单的结构对比,关注其在实际路况中的滤震性、支

weixin_34413103的博客 384

关于Access violation at address 0012F973错误

解决办法: AMD的64位处理器中采用了一种新型的EVP功能(增强型病毒防护)为我们从源头截断了病毒等恶意代码执行的可能。但它只提供硬件支持,要发挥这一功能,还必须与Windows XP SP2或64位操作系统的DEP(数据执行保护)技术相结合。两者结合会把所有内存位置均标记为不可执行——除非该位置已明确包含可执行代码。此举能有效阻止攻击程序企图在不可执行的内存位置中插入代码并执行,很大程度...

weixin_30588675的博客 264

UVM(5)-TLM通信

TLM是一种基于事务 (transaction) 的通信方式,通常在高抽象级语言例如SystemC或者SV/UVM中作为模块之间的通讯方式。

2301_76431006的博客 2106

HBuilderx连接微信开发者工具

系列文章目录 文章目录系列文章目录前言一、环境1.HBuilerx 工具2.微信开发者工具二、关联微信开发者工具1.HBuilderx新建项目2.关联微信开发者工具3.运行微信小程序出现异常解决方法3.最终效果总结 前言 使用HBuilderx工具关联微信开发者工具,进行小程序开发 提示:以下是本篇文章正文内容,下面案例可供参考 一、环境 1.HBuilerx 工具 HBuilderx 2.微信开发者工具 微信开发者工具 二、关联微信开发者工具 1.HBuilderx新建项目 2.关联微信开发者工具

拥有必珍惜 3075

BCB常见错误和运行时异常

写在前面:当你在百度、谷歌上都搜索不到解决方案时,证明你的思路是错误的,应改变解决思路 1、unresolve external '' 这些错误是由于: (1)工程中没有包含相应的cpp文件;(2).h中有函数声明,.cpp中没有函数实现;(3)类的CPP文件中,成员函数没有在方法名前加类名;(4)类静态成员变量没有在cpp文件中初始化;(5)这种情况出现在命名空间中,即.h文件中声明函数,并...

lcfeng1982的专栏 1万+

Unity多渠道APK打包:同一工程稳定输出不冲突安装包

Android应用多渠道分发是移动开发的基础场景,其核心在于解决包名唯一性、渠道可识别性与构建可重复性三大问题。原理上,Unity安卓打包本质是三阶段流程:生成Android工程、Gradle编译、APK签名,而包名冲突根源在生成阶段对PlayerSettings的强依赖。技术价值体现在规避人工配置失误、支撑CI/CD自动化、满足华为/小米等商店合规要求。典型应用场景包括应用宝、TapTap、B站等渠道独立包管理,以及AB测试、灰度发布等运营需求。本文聚焦Unity原生方案,通过BuildPlayerOpt

weixin_33736048的博客 794

delphi 安装包的 提示 access violation at address 1009100. read of address 1009100

在编写一个bpl 包,安装时,出现上面的提示‘delphi 安装包的 提示 access violation at address 1009100. read of address 1009100’,无法安装包bpl.2.选择bdsred.reg.exe ,右键属性进行设置 ‘以管理员权限运行’进入 delphi 安装运行程序的目录。

zjg076000的博客 206

一、两电平IGBT整流器

电压源换流器(Voltage source converter,VSC)连接交流主网和直流电网,起到交直流网络连接、功率输送和电能变换的作用。采用电压控制手段可维持直流电压的稳定;或采用功率控制手段保证系统功率输出达到预期。VSC的三相电压平衡方程如式(1)所示:式中,igx和ugx分别表示主网三相电流与电压(x=a,b,c);ucx表示换流器VSC 交流输出电压;Rg表示交流主网等效电阻;Lg表示交流主网等效电感。

TUCHACHINA的博客 4159

图神经网络实战——总结 | 图神经网络展望

短短数年时间,图神经网络 (Graph Neural Networks, GNN) 已经成为一种重要的深度学习架构,并且已经广泛应用于各个行业。通过本专栏的学习,能够对图学习和 GNN 领域有一个全面的了解,并能为各种应用设计、构建GNN模型。

盼小辉丶的博客 8543

【Delphi7】 解决“程序第一次可以正常编译,但再次编译的时候会报错,必须重新打开Delphi”的问题...

报错如下: Access violation at address 00495044 in module 'coreide70.bpl'. Read of address。。。Access violation at address 0082A534 in module 'vcl70.bpl'. Write of address。。。 解决方法: 将..\Borland\Delphi7\Bin...

weixin_33698043的博客 560

道路施工检测 (construction) - 基于Mapillary Vistas数据集的YOLOv11目标检测及UI界面实现

目标检测是计算机视觉的重要任务,目标是识别图像中的目标物体类别及其位置(用边界框表示)。两阶段检测器:如Faster R-CNN,准确度高但速度较慢单阶段检测器:如YOLO系列、SSD,速度快且精度相对较好,适合实时场景数据量:约25,000张高分辨率街景图标注类型:语义分割、实例分割、多类别检测类别示例:construction, road, car, person, traffic sign等格式:COCO风格JSON标注。

YOLO 496

运行程序提示access violation at address的解决方法-

运行程序提示access violation at address的解决方法- 转帖—————来源:互联网 作者:佚名 问题:打开EXE程序提示时,提示:access violation at address xxxxxxxxx 后边一大堆,这种情况下应该怎么解决呢?百度了一下,原来很简单- 现在把解决方法公布出来:   右击“我的电脑”。单击“属性”。   在“系统属性”中单击“高

godlove_ymx的专栏 8707

OSCP-Challenge 2 - Relia

使用andrea:PasswordPassword_6登录远程桌面,在c盘根目录下发现一个计划任务的ps,文件,修改执行的exe位木马,获取到milana用户的反弹shell。,发现开放了一个8000端口,但是我们外部是访问不到的,它对应的页面是/var/www/internal/,这个目录下的文件我们是可以访问的,把这个文件打个包放到本地分析下。其中数据的可以直接连接mssql,但是端口是49965,不过在数据库中没发现什么可用的信息,但是可以修改密码直接进后台,这个可以先放放。

羽的博客 7763

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

使用scanf_s报错:0xC0000005: Access violation writing location 0x00000000

在vs2010中写了一行scanf(“%s",name); 调式时 提示warning , 提示修改为scanf()使用可能会存在不安全,建议使用scanf_s() 但是我修改成scanf_s("%s",name)之后,正常运行没有问题,也没有了warning ,但是遇到scanf_s("%s",name)这句话时,我输入了一个name, Enter 一下就报如下错误: 0xC0000005:...

weixin_34357267的博客 1281

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AutoCAD2012 致命错误 Unhandled Access Violation ...

此篇文章只是希望被喜欢用度娘或谷哥搜索软件出问题的人搜索到。     AutoCAD2012支持硬件加速,至于前面哪几个版本也支持硬件加速就不得而知了。不过硬件加速对显卡是有要求的,就如同火狐浏览器支持硬件加速对显卡有要求是一样的,对差的显卡索性屏蔽硬件加速,防止显卡驱动bug造成火狐浏览器崩溃。而AutoCAD2012对差的显卡不屏蔽硬件加速,可以允许你开启硬件加速,这就造成了不稳定现象,比如

hastings的专栏 3万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Altium designer报错解决(Access violation at address 000000013D19D944 in module ‘IntegratedLibrary.DLL‘)

Altium designer报错解决(Access violation at address 000000013D19D944 in module 'IntegratedLibrary.DLL') 注册表问题

w0shishabi的博客 3万+

DELPHI系统运行时,提示“ccess violation at address 00000000 .read of address 00000000”是什么意思?

肯定是引用了 已经释放的资源  检查一下你的代码, 有Free的都看一下。应该不是连接出错好像是你把你的DM保存为单元不要保存为DCU保存好了后再USES。 哦这样你可以用with DM.aq_admin do 或者是 DM.aq_admin.sql 或者是其他的,总的来讲是把DM.来调用Access Violation(非法访问),General Protection Fault(一般保

haibindancao的专栏 1万+
上一篇: Access Violations 访问冲突(AVs)是Windows编程时发生的最麻烦的错误?
下一篇: 掌握C++Builder的除错艺术-第一篇
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值