我想澄清包含溢出的堆栈分配变量是否也称为缓冲区?或者它是指文本段,堆段或堆栈段等内存区域?
例如......
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...
}
寻找变量的名称或使用术语来表示包含溢出缓冲区的变量。
答案 0 :(得分:0)
http://en.wikipedia.org/wiki/Data_buffer:
数据缓冲区(或仅缓冲区)是物理内存的区域 存储用于在移动数据时临时存储数据 一个地方到另一个地方。
它与堆栈/堆等无关。
并且溢出不会吞下其他变量的目的
答案 1 :(得分:0)
执行时......
char buf[5];
strcpy(buf, arg3);
... arg3
指向更长的字符串,程序可能会在为buf
保留的堆栈内存后尝试写入内存,这会导致未定义的行为 。您的程序无法正常运行,可能会损坏数据,输出垃圾,挂起,崩溃等。
我想澄清包含溢出的堆栈分配变量是否也称为缓冲区?
堆栈分配的变量 - 即buf
- 甚至没有尝试"包含" "溢出"。无效代码会破坏内存,很可能会破坏堆栈中的内存,但是如果堆栈几乎已满,您甚至可能会尝试写入堆栈末尾。 buf
本身可以合理地被视为buffer
。
或者它指的是文本段,堆段或堆栈段等内存区域?
不确定你在这里猜测的是什么。 buf
位于堆栈上,指针display
(如果它没有被优化掉),而字符"HelloWorld\0"
可能位于只读数据段中(传统的rodata
段或.rodata
)。