缓冲区溢出(vs)缓冲区溢出(vs)堆栈溢出

joe*_*joe 8 c c++ java operating-system

可能重复:
堆栈溢出和缓冲区溢出之间有什么区别?

Buffer Overflow和Buffer Overrun有什么区别?

Buffer Overrun和Stack Overflow有什么区别?

请包含代码示例.我查看了维基百科中的术语,但我无法与C或C++或Java编程相匹配.

Joe*_*orn 31

将缓冲区视为一个数组.一个缓冲区溢出是当你试图把更多的项目在数组中比阵列可以容纳.换句话说,它来自写作.

一个缓冲区溢出是当你遍历缓冲区,请继续阅读过去的数组的末尾.换句话说,它来自阅读.

堆栈溢出是非常不同的.大多数现代编程环境都是基于堆栈的,它们使用堆栈数据结构来控制程序流.每次调用函数时,都会在程序的调用堆栈中放置一个新项.函数返回时,项目将从堆栈中弹出.当堆栈为空时,程序停止.问题是,这个堆栈的大小有限.可以一次调用太多函数并填满堆栈.此时您有堆栈溢出.最常见的方法是在函数调用自身(递归)时.

  • “缓冲区溢出[...]来自读取”-来源? (2认同)

Chr*_*her 16

Bufferoverflow/Bufferoverrun:

void k()
{
    BYTE buf[5];
    for( int i = 0; i < 10; ++i )
        buf[i] = 0xcd;
}
Run Code Online (Sandbox Code Playgroud)

堆栈溢出 :

void f()
{
     int k = 0;
     f();
}
Run Code Online (Sandbox Code Playgroud)