什么是堆栈溢出和缓冲区溢出错误? [复制]
Posted
技术标签:
【中文标题】什么是堆栈溢出和缓冲区溢出错误? [复制]【英文标题】:What are *** and bufferoverflow errors? [duplicate] 【发布时间】:2011-04-23 19:17:37 【问题描述】:可能重复:What is a stack overflow error?
好吧,我听说这是编写程序时最常见的错误...我对编程很陌生,只有 2 年的编码时间,我从未真正遇到过这个错误!所以,冒着听起来很愚蠢的风险,我想问一下……什么是***,什么是bufferoverflow?
*** 是否与 bufferoverflow 有某种关联?
wiki 链接实际上对我没有帮助,因为我已经浏览过它并且我不理解它。所以如果你能把它变笨……你会怎么说?
【问题讨论】:
他也在询问缓冲区溢出问题。 注意:这不属于meta,因为它是关于“堆栈溢出”运行时错误,而不是“堆栈溢出”Web应用程序。 绝对不是完全相同的副本!编辑了问题。请投票重新打开! 我认为它们已作为单独的问题得到回答,而不是作为两者的愚蠢比较。我认为这是一个独特的问题。除非你能给我一个链接来回答我的问题...谢谢 与***.com/questions/1120575/… 完全相同!看看您的链接问题。它结合了更多问题,您可以单独浏览该网站以获取... 【参考方案1】:*** 是当您用完程序执行的堆栈空间时会发生的情况。
前几天我得到了一个写得很糟糕的事件代码,其中一个事件会触发另一个事件导致原始事件,依此类推,直到堆栈因方法调用而溢出。
当您尝试将数据写入数组末尾时会发生缓冲区溢出或缓冲区溢出。例如
char* s = "hello";
s[7] = 'g';
不知道将 'g' 写入字符串中的位置 7 会做什么。邪恶的程序员可以使用这种技术在系统上执行任意代码。
【讨论】:
【参考方案2】:大多数操作系统将程序信息保存在称为堆栈和堆的数据结构中。
当一个人向堆栈添加的信息超过了它允许保存的信息时,就会发生 ***(很多时候这可能发生在没有终止子句的递归函数中)。
缓冲区是一组用于保存临时数据的内存位置(通常是连续的)。尝试写入超出缓冲区末尾的内存时会发生缓冲区溢出。这具有安全隐患,因为有时缓冲区之外的内存不受保护,并且在执行之后插入的代码可能会被执行。
【讨论】:
以上是关于什么是堆栈溢出和缓冲区溢出错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章