跟踪访问冲突AVs的位置

我未娶3你未嫁3

我未娶3你未嫁3

2016-02-19 13:07

今天图老师小编给大家介绍下跟踪访问冲突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!
展开更多 50%)
分享

猜你喜欢

跟踪访问冲突AVs的位置

编程语言 网络编程
跟踪访问冲突AVs的位置

如何关闭Android位置跟踪

Android
如何关闭Android位置跟踪

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

最近访问的位置怎么删除?电脑桌面最近访问的位置删除方法

windows
最近访问的位置怎么删除?电脑桌面最近访问的位置删除方法

win7最近访问的位置怎么删除?

电脑网络
win7最近访问的位置怎么删除?

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

删掉win7系统的最近访问位置功能

电脑入门
删掉win7系统的最近访问位置功能

冲突攻略

电脑网络
冲突攻略

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Java入门笔记2_Applet

Java入门笔记2_Applet

jquery toggle faq 春江花月夜版

jquery toggle faq 春江花月夜版
下拉加载更多内容 ↓