堆栈溢出一般是由啥原因导致的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆栈溢出一般是由啥原因导致的?相关的知识,希望对你有一定的参考价值。

递归过程的局部变量过多、递归深度过大,是造成系统栈溢出的原因,特别是递归列循环时肯定会发生系统栈溢出。

递归堆栈溢出的解决方案是尾部递归优化。事实上,尾部递归和循环具有相同的效果,所以可以把循环看作是一个特殊的尾部递归函数。

尾部递归,当函数返回时调用自身,并且返回语句不能包含表达式。通过这种方式,编译器或解释器可以优化尾部递归,这样递归本身无论被调用多少次,都只占用一个堆栈帧,而不会出现堆栈溢出。

扩展资料:

针对堆栈溢出可能造成的计算机安全问题,通常有以下这些防范措施:

1、强制代码遵循正确的规则。

2、使操作系统无法执行缓冲区,从而防止攻击者植入攻击代码。但是,由于攻击者不必求助于嵌入代码,而且Linux使用可执行的堆栈属性来发出信号和在线重用GCC,这种方法仍然有一些弱点。

3、利用编译器的边界检查实现缓冲区保护。这种方法使缓冲区溢出不可能发生,完全消除了缓冲区溢出的威胁,但是代价很高,比如性能较低。

4、对程序指针完整性进行检查,该方法可以防止绝大多数的缓冲区溢出攻击。这意味着在程序使用指针之前检查指针的内容是否已更改。

参考技术A 递归过程的局部变量过多、递归深度过大,是造成系统栈溢出的原因,特别是递归列循环时肯定会发生系统栈溢出。 参考技术B 一般情况下,是读写数据超出来申的内存的范围。
堆栈溢出一般会报段错误本回答被提问者采纳

堆栈和堆溢出利用是啥意思

【中文标题】堆栈和堆溢出利用是啥意思【英文标题】:what does stack and heap overflow exploit means堆栈和堆溢出利用是什么意思 【发布时间】:2011-05-30 21:53:48 【问题描述】:

这个堆栈和堆溢出漏洞是什么意思

【问题讨论】:

你用tcp标记这个有什么原因吗? stack-overflow 意味着你在这里,而 heap-overflow 意味着和我一起创建一个:D @Oded 我正在经历一些 TCP 攻击,在那里我遇到了这个......但是我找不到关于这个的好文章。 【参考方案1】:

基于堆栈的利用示例:(实现已定义或可能未定义,但很有趣!)

看看输出: http://www.ideone.com/A3vlY

还要注意运行时错误!

我特别想这样做:

通过覆盖堆栈帧中的返回地址。一旦函数 返回,执行将在 由指定的返回地址 攻击者,通常是一个用户输入填充 缓冲区。

来自***基于堆栈的利用bullet points

这个例子可能展示了上面引用自***的要点,为您提供了一个有趣的起点,让您了解基于堆栈的利用可能意味着什么。一种思考的动力!

【讨论】:

【参考方案2】:

对于这方面的真实示例,请查看另一个 Stack Overflow 问题:

Writing to pointer out of bounds after malloc() not causing error

【讨论】:

【参考方案3】:

***对这些类型的攻击有很好的概述:http://en.wikipedia.org/wiki/Buffer_overflow

【讨论】:

以上是关于堆栈溢出一般是由啥原因导致的?的主要内容,如果未能解决你的问题,请参考以下文章

怎么防止堆栈溢出

堆栈和堆溢出利用是啥意思

函数调用多少会导致栈溢出

分段错误和堆栈溢出有啥区别?

基于堆栈的缓冲区溢出

打开电脑网页会弹出“堆栈溢出”,这是啥问题,怎么解决?求大神解答,谢了!