计算机存储溢出 是什么意思,数据溢出是什么意思

news/2024/11/22 20:34:25/

原标题:数据溢出是什么意思

数据溢出

在计算机中,当要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出。

溢出原因

数据类型超过了计算机字长的界限就会出现数据溢出的情况。导致内存溢出问题的原因有很多,比如:

(1) 使用非类型安全(non-type-safe)的语言如 C/C++ 等。

(2) 以不可靠的方式存取或者复制内存缓冲区。

(3)编译器设置的内存缓冲区太靠近关键数据结构。

7ce959b408cf7f2dfa36a612cfe4b16d.png

因素分析

1.内存溢出问题是 C 语言或者 C++ 语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性(type-safety)。众所周知,用 C/C++ 语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了 C/C++ 语言代码的性能。只要合理编码,C/C++应用程序在执行效率上必然优于其它高级语言。然而,C/C++ 语言导致内存溢出问题的可能性也要大许多。其他语言也存在内存溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。

969bddd7f2677f3c532ae2729bc5db47.png

2. 当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了 N 字节大小的内存缓冲区,随后又向其中复制超过 N 字节的数据)。内存缓冲区就可能会溢出。想一想,如果你向 12 盎司的玻璃杯中倒入 16 盎司水,那么多出来的 4 盎司水怎么办?当然会满到玻璃杯外面了!

38621bb7fcd70550c857601d6f5a63be.png

3. 最重要的是,C/C++编译器开辟的内存缓冲区常常邻近重要的数据结构。假设某个函数的堆栈紧接在在内存缓冲区后面时,其中保存的函数返回地址就会与内存缓冲区相邻。此时,恶意攻击者就可以向内存缓冲区复制大量数据,从而使得内存缓冲区溢出并覆盖原先保存于堆栈中的函数返回地址。这样,函数的返回地址就被攻击者换成了他指定的数值;一旦函数调用完毕,就会继续执行“函数返回地址”处的代码。非但如此,C++ 的某些其它数据结构,比如 v-table 、例外事件处理程序、函数指针等,也可能受到类似的攻击。返回搜狐,查看更多

责任编辑:


http://www.ppmy.cn/news/706913.html

相关文章

计算机系统中引入虚拟内存的好处是什么,虚拟内存的作用是什么

虚拟内存是电脑中的一种内存管理的技术,有它才能下载日常生活中需要的软件,那么虚拟内存的作用到底是什么呢,今天就和大家一起来看看虚拟内存的作用到底是什么。 虚拟内存的作用介绍: 1、每个运行在Windows环境下的进程&#xff0…

工作内存与主内存是什么,硬件层面的存储架构是什么样,线程的实现原理是什么

工作内存与主内存 java内存模型并不真正的存在,是一种规则规定了程序中各个变量的访问方式。线程运行的时候,每个线程创建时候jvm都会为其创建一个工作内存,java的所有的变量都存放在主内存中是共享的数据区域。线程对变量进行操作&#xff…

java的栈区 堆区存放什么_简单整理java中的栈内存, 堆内存是什么?

上一篇文章简单整理了栈(stack), 堆(heap), 队列(queue)的结构 这一篇继续整理java中的 占内存,堆内存。 Java把内存划分成两种:一种是栈内存,一种是堆内存。 这里需要解释一下, 这里的堆内存是跟数据结构的堆是完全两码事。 一、栈内存 存放基本类型的变量,以及对象的引用…

计算机存储容量的基本单位pb,pb存储单位是什么

pb存储单位是一种计算机存储单位,pb的英文全称是Petabytes,其中文名叫拍字节;计算机存储单位一般用字节Byte、千字节KB、兆字节MB、吉字节GB、太字节TB、拍字节PB、艾字节EB等表示。 本文操作环境:Windows7系统,Dell G…

计算机中存储器的最小单位是什么意思,计算机内存储器的最小存储单位是什么...

计算机存储信息的最小单位,称之为位(bit,又称比特) 存储器中所包含存储单元的数量称为存储容量,其计量基本单位是字节(Byte。简称B),8个二进制位称为1个字节,此外还有KB、MB、GB、TB等,它们之间的换算关系是…

到底什么是存储?

大家好,我是新爷。 在这里我一直都在阐述着关于生信方面,数据方面的一些文章~ 那今天我给大家说说到底什么是存储。 简单的来说,存储就是用来存数据的,有下机数据,有中间结果数据,有最终结果数据。但很多…

什么是内存

在计算机的组成结构中,有一个很重要的部分,就是存储器。存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主存储…

std::shared_ptr 用法

描述: std::shared_ptr是c标准库中的一个模板类,它提供了自动化的内存管理,通过共享引用计数的方式来管理动态分配的对象。这意味着多个std::shared_ptr可以共享同一个对象,并在不再需要时自动释放它。 构造: …