我刚刚发现有一个 STATUS_STACK_BUFFER_OVERRUN 和一个 STATUS_STACK_OVERFLOW。这2个有什么区别?我刚刚发现堆栈溢出(堆栈耗尽)与堆栈缓冲区溢出不同,但要么没有解释,要么我不明白。你能帮我吗?
问候托拜厄斯
我刚刚发现有一个 STATUS_STACK_BUFFER_OVERRUN 和一个 STATUS_STACK_OVERFLOW。这2个有什么区别?我刚刚发现堆栈溢出(堆栈耗尽)与堆栈缓冲区溢出不同,但要么没有解释,要么我不明白。你能帮我吗?
问候托拜厄斯
考虑以下在内存中向下增长的堆栈:
+----------------+
| some data | |
+----------------+ | growth of stack
| 20-byte string | V
+----------------+
limit of stack
当您将 30 个字节写入 20 字节字符串时,会发生缓冲区溢出。这会破坏堆栈中的条目(“某些数据”)。
堆栈溢出是当您尝试在堆栈已满时将其他内容推入堆栈(此处显示“堆栈限制”)。堆栈的最大大小通常受到限制。
Stackoverflow
当内存中没有更多空间来分配数据时出现,并且当程序超出缓冲区边界并在内存的意外部分写入/覆盖数据(占用比预期更多的内存)时调用buffer overrun
aka 。buffer overflow
很容易,您只需阅读标签stackoverflow和buffer overflow的描述即可理解这一点。