就我对编程语言的理解,缓冲区是存储数据的任何内存部分,例如int、float变量、字符数组等。
然而,在了解缓冲区溢出时,我阅读关于堆栈的内容时发现了这个链接http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html。链接中的图将缓冲区与函数的局部变量分开。那么缓冲区到底是什么呢?
就我对编程语言的理解,缓冲区是存储数据的任何内存部分,例如int、float变量、字符数组等。
然而,在了解缓冲区溢出时,我阅读关于堆栈的内容时发现了这个链接http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html。链接中的图将缓冲区与函数的局部变量分开。那么缓冲区到底是什么呢?
当然,并非所有的变量都被存储在缓冲区中,否则这个术语就没有意义了。
缓冲区是从一个地方到另一个地方传输数据时所使用的临时存储区域。通常缓冲区能够容纳比单个变量更多的数据,但也有一些特殊情况下缓冲区相对较小。
本地变量可以用作缓冲区,这样会在堆栈上分配它,但由于缓冲区通常很大,占用大量栈空间将不切实际,因此它们通常在其他地方分配。
缓冲区的一种应用场景是,在程序从文件读取数据时。在较低层次上,磁盘只能按扇区进行读取,因此系统会将一组扇区读入缓冲区,然后程序从缓冲区读取。
不要太字面理解那个图表。你的第一个定义是正确的。那个缓冲区可以是一个局部变量,也可以在堆上或其他内存区域中...它是一个非常通用的概念。
char myString[80];
。危险在于,如果未严格监测放入此缓冲区的数据长度,您可能会将一些数据复制到缓冲区并溢出到末尾 - 在这一点上,保存的寄存器将被破坏,从函数返回可能(并几乎肯定)会造成破坏。它只是一个分配的内存块,可以暂时保存任意数据。需要记住的是,如果您分配了一块内存,请确保在完成后释放它,以防止发生溢出和其他意外行为。