`
isiqi
  • 浏览: 16480377 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

变量溢出引发的错误

阅读更多

前几天II型隧道广告由于安装位置由边墙调整到中墙,这一改动相当于列车到来的方向发生了逆转,程序需要改动才能适应这种情况。worker_1983网友曾留言说,“还好地铁只是朝一个方向开.如果反着开可就有意思了”,可谓一针见血,不过对我们来说不是有意思,麻烦大了。

在改动方面,其实对软件来说改动量不大,仅对下载的数据有一定调整,由于早期的程序用VB开发(唉,已经几年没用VB编写程序了,代码看起来很亲切),倒是在哪里插入这段代码费了我不少时间(由此想到了一个流传甚广的小故事,一个有名的工程师解决电机问题后,面对别人的质问时说,画一根线一美元,知道在哪里画需要999美元)。

程序很简单,如下:

PublicSubPicData(bytData()AsByte)
……
'------------------------------------------------
ConstintDataSize=6144'G_PicWidth*24
DimbytData3(intDataSize)AsByte
DimbytData6(intDataSize)AsByte
OnErrorGoToToExit'打开错误陷阱

'第3块数据缓存
CopyMemorybytData3(0),bytData(intDataSize*3),intDataSize
'第5块数据移到第3块位置
CopyMemorybytData(intDataSize*3),bytData(intDataSize*5),intDataSize
'第6块数据移到第5块数据位置
CopyMemorybytData(intDataSize*5),bytData(intDataSize*6),intDataSize
'第3块数据移动到第6块位置
CopyMemorybytData(intDataSize*6),bytData3(0),intDataSize
'------------------------------------------------
……
ExitSub
'----------------
ToExit:
EndSub

程序修改编译后,信心满满的给硬件人员进行下载调试了,过了近一天的时间,一问硬件技术人员,说下载数据后,画面异常,不知道是硬件问题还是软件问题。只好把笔记本带到测试室,和硬件人员一起调试确认。就这么几句代码,费了我不少时间,我才发现问题的所在,第一我发现6144*6一定大于32千多,意味做对integer整型有可能溢出,第二错误处理直接退出了,没有提示(这种做法真危险!),第三定义intDataSize没有定义类型,默认也就是integer了。

Const intDataSize = 6144 代码修改为Const intDataSize As Long = 6144

问题搞定。幸好修改的代码不多,否则这点错误还真要命,此外得到教训是,调试程序时最好把程序错误处理暂时关掉(或错误存在文件里,不过这个时候够呛想到去看)。

分享到:
评论

相关推荐

    西门子KTP1200触摸屏报警_溢出 挂起的报警将被丢弃.docx

    对于KTP1200来说,当一个错误类别报警触发(即变量1变为0)时,仅仅这个条件还不足以消除报警。用户必须手动进行确认操作,即点击触摸屏上的"确认"按钮,这样才能清除报警状态。 - **警告类别报警**:与错误类报警...

    溢出代码 教你网站溢出漏洞

    在编程语言中,溢出通常不会自动引发错误,而是会导致结果的模运算,这可能产生意外的行为。 在网站环境中,溢出漏洞通常与缓冲区溢出相关。缓冲区是程序中用于临时存储数据的一块内存区域。当程序员错误地处理了...

    软件测试技术中关于溢出的问题

    6. **异常处理**:设置适当的异常处理机制,捕获溢出引发的错误,防止程序崩溃。 7. **最小权限原则**:运行应用程序时,尽可能限制其访问权限,减少溢出后可能造成的损害。 了解溢出问题对于软件测试人员至关重要...

    Q版缓冲区溢出教程(电子书版)

    第3章和第4章可能进一步讨论堆溢出和全局变量溢出,这些类型在实际攻击中也有重要的地位。 第5章可能涉及检测和防止缓冲区溢出的技术,比如使用边界检查、堆栈保护(如Canary)和编译器级别的防护机制。第6章可能...

    缓冲区溢出实验

    - **根本原因**:C/C++等语言中的一些标准库函数(如`strcpy()`、`strcat()`等)缺乏边界检查机制,容易引发缓冲区溢出问题。 #### 具体案例分析 - **案例简介**:实验中通过一个简单的C语言程序示例来模拟堆溢出...

    ASP技术常遇问题解答-如何解决“cint和clng的溢出出错”问题?.zip

    引发溢出错误的常见原因有以下几点: 1. **数值过大**:如果尝试转换的数值超过了Integer或Long数据类型的限制,就会导致溢出。例如,尝试将一个超过32,767的正数转换为Integer,或超过2,147,483,647的数值转换为...

    缓冲溢出原理的具体分析

    本文主要关注栈溢出,因为它是最常见的攻击目标,且容易引发严重的安全问题。栈是程序运行时用于存储局部变量、函数参数和返回地址的内存区域。当一个函数调用另一个函数时,返回地址会被压入栈中,以便在子函数执行...

    缓冲区溢出教程缓冲区溢出教程

    3. **静态溢出**:涉及到全局变量或静态变量,影响整个程序的运行。 **三、溢出的危害** 缓冲区溢出可能导致以下严重后果: 1. **程序崩溃**:超出范围的数据写入导致内存结构损坏,使程序无法正常执行。 2. **数据...

    Matlab溢出问题的研究代码

    在编程领域,溢出问题是一种常见的错误类型,特别是在数值计算中。Matlab作为一种强大的数值计算环境,虽然在处理大部分计算时能提供良好的精度和效率,但依然可能存在溢出问题。本篇文章将深入探讨Matlab中的溢出...

    不使用第三个变量进行交换的三种方式以及隐藏隐患

    在三种方法的比较中,我们可以看到加减法交换变量由于其可能引发的溢出问题,需要谨慎使用;异或运算方法和位运算方法在处理特定值时会出现问题。尽管如此,它们在多数情况下仍能正确运行,如果确保变量值不会导致...

    Q版缓冲区溢出教程-王炜

    2. **栈溢出**:栈是程序运行时的重要数据结构,栈溢出通常涉及函数调用过程中的局部变量。教程可能阐述了如何通过溢出栈上的返回地址来控制程序执行流程。 3. **堆溢出**:与栈不同,堆是动态分配内存的地方。堆...

    java基础-变量常见错.docx

    【变量使用常见错误】 ...确保在编程过程中注意这些细节,可以有效避免因变量使用不当引发的错误。遵循良好的编程实践,如声明和初始化变量,以及正确地使用变量类型,将有助于编写出更稳定、可维护的Java程序。

    2013年西电网络攻防大赛溢出题答案及要求

    4. **非堆栈溢出**:包括BSS段溢出、全局变量溢出等,这些区域存放未初始化的全局变量和静态变量,溢出同样可能导致程序行为的改变。 为了防止溢出攻击,程序员应遵循以下几点: - 使用安全的编程语言,如Rust、...

    VB 递归的“栈溢出”

    栈溢出是由于递归深度过大,导致程序运行时内存栈空间耗尽而引发的错误。下面我们将深入探讨VB中的递归以及如何防止栈溢出。 首先,我们需要理解递归的基本概念。递归是当一个函数在其定义中调用自身时发生的情况。...

    栈溢出漏洞

    4. **栈平衡错误**:在使用栈平衡技术(如Canary)防止栈溢出时,如果攻击者能够绕过保护机制,仍可能导致溢出。 栈溢出漏洞的危害包括: 1. **代码执行**:溢出的数据可以覆盖返回地址,使得程序在函数返回时跳转...

    堆栈溢出漏洞原理及测试.pdf

    3. **不安全的函数使用**:一些不安全的函数,如`gets()`、`sprintf()`等,如果没有正确地限制输入数据的长度,也会引发堆栈溢出。 #### 三、堆栈溢出的危害 1. **程序崩溃**:最直接的影响就是导致程序崩溃,无法...

    简单的缓冲区溢出源码

    - **堆溢出**:当动态分配的内存(例如通过`malloc()`分配)被错误地使用超过其边界时,会发生堆溢出。 #### 三、缓冲区溢出案例分析 下面我们将基于给定的C语言代码片段进行详细分析,了解缓冲区溢出是如何发生的...

    JAVA内存溢出详解.doc

    - **直接内存溢出**:使用DirectByteBuffer等直接分配的内存,如果超出系统物理内存,也会引发溢出。 3. **解决Java内存溢出的策略** - **调整JVM参数**:通过-Xms和-Xmx设置初始和最大堆大小,避免因内存分配...

Global site tag (gtag.js) - Google Analytics