包含溢出缓冲区的堆栈分配变量,也称为缓冲区

Is the stack-allocated variable that contains the overflowed buffer also called a buffer?

本文关键字:缓冲区 变量 分配 溢出 堆栈 包含      更新时间:2023-10-16

我只想澄清一下,包含溢出的堆栈分配变量是否也称为缓冲区?或者它指的是内存的区域,如文本段、堆段或堆栈段?

例如。。。

void func(char* arg3)
{
    char buf[5];
    strcpy(buf, arg3);
}
int main()
{
    char *display = "HelloWorld";
    func (display); //buffer overflow since HelloWorld consists of 10 characters
                    // while the buffer is only 5...
}

查找变量的名称或术语用于表示包含溢出缓冲区的变量。

当你执行...

char buf[5];
strcpy(buf, arg3);

。当arg3指向更长的字符串时,程序可能会尝试在为buf保留的堆栈内存之后写入内存,这会导致未定义的行为。 您的程序不能正常工作,并且可能会损坏数据,输出垃圾,挂起,崩溃等。

我只想澄清一下,包含溢出的堆栈分配变量是否也称为缓冲区?

堆栈分配的变量 - 即buf - 甚至不尝试"包含"溢出"。 无效代码会损坏内存,很可能是堆栈上的内存,但如果堆栈碰巧几乎已满,您甚至可能会尝试写入堆栈末尾。 buf本身可以合理地被视为buffer

或者它指的是内存的区域,如文本段、堆段或堆栈段?

不知道你在这里猜什么。 buf在堆栈上,指针display也是如此(如果没有优化),而字符"HelloWorld"可能位于只读数据段中(传统上rodata段或.rodata)。

http://en.wikipedia.org/wiki/Data_buffer:

数据缓冲区(或只是缓冲区)是物理内存的一个区域 用于在移动数据时临时存储数据的存储 一个地方到另一个地方。

它与堆栈/堆等无关。
溢出不会吞噬其他变量的目的