STATUS_STACK_BUFFER_OVERRUN和STATUS_STACK_OVERFLOW有什么区别?

我刚刚发现有一个STATUS_STACK_BUFFER_OVERRUN和一个STATUS_STACK_OVERFLOW。 那两个有什么区别? 我只是发现堆栈溢出(堆栈耗尽)不同于堆栈缓冲区溢出,但要么不解释,要么我不明白。 你能帮我吗?

问候Tobias

Solutions Collecting From Web of "STATUS_STACK_BUFFER_OVERRUN和STATUS_STACK_OVERFLOW有什么区别?"

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

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

当您向您的20字节字符串写入30个字节时,发生缓冲区溢出。 这破坏了进一步向上堆栈(“一些数据”)。

堆栈溢出是在堆栈已满时尝试将其他堆栈推送到堆栈(它表示“堆栈限制”)。 堆栈的最大尺寸通常受到限制。

当内存中没有更多的空间来分配数据时,将出现Stackoverflow ,并且当程序超出缓冲区边界并在覆盖内存的意外部分写入/覆盖数据(占用比预期更多的内存)时调用buffer overrun (也称为buffer overflow )。

很容易,只要阅读标签stackoverflow和缓冲区溢出的描述就可以理解这一点