包含溢出缓冲区的堆栈分配变量,也称为缓冲区
Is the stack-allocated variable that contains the overflowed buffer also called a buffer?
我只想澄清一下,包含溢出的堆栈分配变量是否也称为缓冲区?或者它指的是内存的区域,如文本段、堆段或堆栈段?
例如。。。
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:
数据缓冲区(或只是缓冲区)是物理内存的一个区域 用于在移动数据时临时存储数据的存储 一个地方到另一个地方。
它与堆栈/堆等无关。
溢出不会吞噬其他变量的目的
相关文章:
- 使用不带缓冲区变量的冲刺
- 为什么使用 SPI 时,全局缓冲区变量产生的结果与局部缓冲区变量不同
- 重置/包装 C/C++ 中的变量(环缓冲区指针)
- C 缓冲区溢出或损坏的变量
- C++:使用指针访问缓冲区与使用增量变量
- 从二进制缓冲区初始化变量的正确方法是什么
- 从 char 缓冲区读取 32 位变量
- 当与可能导致缓冲区溢出的功能一起使用时,外部变量是否比其他变量更大
- 包含溢出缓冲区的堆栈分配变量,也称为缓冲区
- 缓冲区和变量Element未声明(首次在函数中使用)
- DirectX11如何从常量缓冲区中删除未使用的变量
- c++: Std::cout缓冲区错误?对字符串变量和字符串字面值使用std::cout导致输出混乱
- 临时缓冲区:局部或成员变量
- 将缓冲区存储到变量中
- 用变量初始化缓冲区数组的长度
- emacs:强制解析缓冲区的局部变量
- 缓冲区溢出-变量的更改
- C++DLL中的线程安全字符串缓冲区变量
- 缓冲区溢出不影响常量变量
- c++ hsl缓冲区变量