首页 > 编程知识 正文

linux系统崩溃 恢复,linux进程崩溃日志保存

时间:2023-05-05 21:37:27 阅读:62683 作者:3103

我们最近调查了内存泄漏和程序不定期的crash问题,其中有以下横向展开的观点:

向数组越境写入导致的程序堆栈破坏引起的crash .原因是什么? 首先,需要理解内存的布局,如下图所示。

从下到上,内存依次存储只读程序代码和数据、全局变量和静态变量、堆中的动态申请变量和堆栈中的自动变量。

自动变量是指在函数中声明的局部变量。 函数被调用时,它被推入堆栈中。 当函数返回时,它将从堆栈中调用。

堆栈的使用基本上由系统控制,而不是用户直接控制,因此堆栈的使用相对安全。

动态内存是一把双刃剑。 程序员提供了更灵活的内存使用方法,一些算法没有动态内存很难实现,但动态内存往往是内存问题的沃土。

数组越界写入是破坏堆栈的原因之一:

1、入口参数为堆栈底(内存上位)附近(函数返回地址也附近) )。

2、数组的存储,从内存的低位向上位进行存储。 因此,如果数组大小为4字节,则越界写入会向上破坏存储在相邻高位内存中的数据。 可能是上一个局部变量。 越境写入的内容足够多的话,保存在堆栈底部的函数的返回地址会被破坏,直接函数返回时会发生crash。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。