什么叫‘缓冲区’?电脑术语

来源:百度知道 编辑:UC知道 时间:2024/05/27 18:29:55

缓冲区的定义是:“高速设备与低速设备之间的缓冲装置”。可以把CPU比作“装卸车队”,内存比作“仓库”,由于CPU和内存速度不相同,相当于“装卸车队”和“仓库”之间的卸货进货速度不一致,“车队” 卸货速度快“仓库” 进货速度慢,造成“车队”排队等“仓库”而浪费了“车队”时间的现象。为了解决这一矛盾,“车队”通常把货卸在一个平台上,让“仓库”慢慢地进货,而“车队”就可以去做其它工作了。这个平台就起到缓冲的作用,被人们称为“缓冲区”。

缓冲区溢出
缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。

缓冲区是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。问题随着动态分配变量而出现。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。如果程序在动态分配缓冲区放入太多的数据会有什么现象?它溢出了,漏到了别的地方。一个缓冲区溢出应用程序使用这个溢出的数据将汇编语言代码放到计算机的内存中,通常是产生root权限的地方。单单的缓冲区溢出,并不会产生安全问题。只有将溢出送到能够以root权限运行命令的区域才行。这样,一个缓冲区利用程序将能运行的指令放在了有root权限的内存中,从而一旦运行这些指令,就是以root权限控制了计算机。总结一下上面的描述。缓冲区溢出指的是一种系统攻击的手段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程序:

example0.c
-----------------------------------------------------------
void function(char *str) {
char buffer[16];

strcpy(buffer,str);
}
-----------------------------------------------------------