STATUS_STACK_BUFFER_OVERRUN和STATUS_STACK_OVERFLOW有什么区别?

时间:2012-10-11 10:08:32

标签: windows stack-overflow buffer-overflow buffer-overrun

我刚发现有一个STATUS_STACK_BUFFER_OVERRUN和一个STATUS_STACK_OVERFLOW。那两个有什么区别?我刚刚找到Stack overflow (stack exhaustion) not the same as stack buffer overflow,但要么它没有解释它,要么我不理解它。你能救我一下吗?

此致 托拜厄斯

2 个答案:

答案 0 :(得分:8)

考虑以下在内存中向下增长的堆栈:

+----------------+
| some data      |   |
+----------------+   | growth of stack
| 20-byte string |   V
+----------------+
 limit of stack

当您向20字节字符串写入30个字节时,会发生缓冲区溢出。这会破坏堆栈中的条目(“某些数据”)。

堆栈溢出是当你尝试将 on 上的其他内容推送到堆栈时它已经满了(它表示“堆栈限制”)。堆栈的大小通常有限。

答案 1 :(得分:0)

当内存中没有更多空间来分配数据时,会出现

Stackoverflow,当程序超出缓冲区边界并在意外部分写入/覆盖数据时,会调用buffer overrun aka buffer overflow内存(占用的内存比预期的多)。

通过阅读标记stackoverflowbuffer overflow 的说明,您可以轻松理解这一点。