joe*_*joe 8 c c++ java operating-system
可能重复:
堆栈溢出和缓冲区溢出之间有什么区别?
Buffer Overflow和Buffer Overrun有什么区别?
Buffer Overrun和Stack Overflow有什么区别?
请包含代码示例.我查看了维基百科中的术语,但我无法与C或C++或Java编程相匹配.
Joe*_*orn 31
将缓冲区视为一个数组.一个缓冲区溢出是当你试图把更多的项目在数组中比阵列可以容纳.换句话说,它来自写作.
一个缓冲区溢出是当你遍历缓冲区,请继续阅读过去的数组的末尾.换句话说,它来自阅读.
堆栈溢出是非常不同的.大多数现代编程环境都是基于堆栈的,它们使用堆栈数据结构来控制程序流.每次调用函数时,都会在程序的调用堆栈中放置一个新项.函数返回时,项目将从堆栈中弹出.当堆栈为空时,程序停止.问题是,这个堆栈的大小有限.可以一次调用太多函数并填满堆栈.此时您有堆栈溢出.最常见的方法是在函数调用自身(递归)时.
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)
| 归档时间: |
|
| 查看次数: |
10430 次 |
| 最近记录: |