当前位置:首页 > 内存 > 正文

内存溢出是什么意思(内存泄漏是什么意思)

  • 内存
  • 2024-06-14 23:06:28
  • 8841

一、计算机高手大神来啊啊啊!什么是溢出,它对二进制有何影响呢?谢谢啦!详细点哦!

溢出是指:当要表示的数据超出计算机使用的数据表示范围时,就会发生数据溢出。

例如,定义的数据类型只能存储8位。如果该值变成9位,就会溢出。

至于对二进制的影响,如果是有符号数,则高位为符号位,溢出可以改变结果的符号。这也可能会影响数据的准确性。

扩展信息:

如果数据类型超出计算机的字长限制,就会发生数据溢出。内存不足问题的原因有很多,例如:

1.使用C/C++等不安全语言

2.不可靠地访问或复制缓冲区。

3.编译器设置的内存缓冲区距离关键数据结构太近。

内存溢出问题是C语言或C++语言的固有缺陷。它们不检查数组边界或类型安全。

众所周知,用C/C++语言开发的程序可以直接访问内存和寄存器,因为目标代码距离机器核心很近。这一特性极大地提高了C/C++语言代码的性能。只要编码正确,C/C++应用程序在执行效率上肯定会优于其他高级语言。

参考来源:-Overflow


二、什么是内存溢出?还有什么是虚拟内存?内存缓冲区溢出是指将超过其正常长度的内容写入到程序的缓冲区中,导致缓冲区溢出,从而破坏程序的正常堆栈,导致程序执行其他命令,从而达到系统损坏的目的。攻击的目的。缓冲区溢出的原因是程序员在编程时没有仔细考虑用户输入参数时可能出现的异常情况。
一般情况下,随机向缓冲区填充数据导致溢出只会导致程序出现“segmentationfault”错误,无法达到攻击的目的。最常见的方法就是将要执行的十六进制机器码写入溢出缓冲区,并利用溢出手段覆盖程序正常的返回地址内容,将程序返回地址指向溢出缓冲区的开头,这样这样就可以达到执行其他命令的目的了。
缓冲区溢出漏洞可用于执行任意命令或覆盖系统文件,但缓冲区溢出通常用于执行Shell。如果存在缓冲区溢出漏洞的程序属于root且是suid程序,则攻击者因此可以获得具有root权限的shell,从而获得对系统的最高控制权。
“缓冲区溢出”攻击明显利用了编程疏忽。root的suid程序如果存在缓冲区溢出漏洞是非常危险的。
Windows操作系统使用虚拟内存来动态管理运行时交换文件。为了提供比实际物理内存更多的内存容量供使用,Windows操作系统占用了硬盘上的一部分空间作为虚拟内存。当CPU有请求时,会首先读取内存中的数据。当内存容量不足时,Windows会将需要临时存储的数据写入硬盘。因此,计算机的内存大小等于实际物理内存容量加上“分页文件”(即交换文件)的大小。如有必要,页面文件会使用硬盘驱动器上的所有可用空间。如果条件允许,您应该尽可能应用此功能设置。