zoukankan      html  css  js  c++  java
  • 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件

    制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
    1,安装kernel-debuginfo$(uname -r).rpm和kernel-debuginfo-common-$(uname -r).rpm
    2,开启内核崩溃转储
    service kdump start
    3,开启Magic System Request Key功能
    echo 1 >/proc/sys/kernel/sysrq
    4,永久开启Magci System Request Key功能
    编辑/etc/sysctl.conf文件使kernel.sysrq的值为1,1表示开启 0表示关闭
    vim /etc/sysctl.conf 
    kernel.sysrq = 1 
    5,制造系统崩溃
    echo c >/proc/sysrq-trigger
    6,等待系统重启后重新登录进入分析崩溃产生的vmcore文件
    6.1 使用crash分析vmcore文件
    crash   /usr/lib/debug/lib/module/2.6.32-431.el6.x86_64/vmlinux   /var/crash/127.0.0.1-2017-04-05-15\:12\:12/vmcore
     
    6.2 查看崩溃前的系统调用
    crash> bt
     
    从上图我们看到了一个异常[exception RIP: sysrq_handle_crash+22]。下面进一步对这个调用的函数进行分析
    6.3 反汇编该段函数
    crash> dis -l  sysrq_handle_crash+22
     
    如图可以看到出现异常的地方是在/usr/src/debug/kernel-2.6.32-431.el6/linux-2.6.32-431.el6.x86_64/drivers/char/sysrq.c:文件的130行的地方,接下来我们查看一下该文件的130行写着什么
    6.4 分析异常函数所对应的文件源码
     
    从上图可以看出该函数是强制崩溃,代码也给出了注释:/* force panic */ ,把这段代码copy出来用gdb进行调试会发现报SIGSEGV的错,如下图
     
    program received signal SIGSEGV,Segmentation fault. 经过查阅资料得知SIGSEGV信号是无效的的内存访问。就这样问题被一步一步的找出了,此处是人为调用了系统的强制崩溃,只是为了帮助理解分析系统崩溃的思路和过程。
  • 相关阅读:
    mapper.xml接收多个参数
    java循环调用多个timer定时器
    java执行cmd命令的两种方法
    java解压.ZIP .TAR等常用格式文件
    HDU2157 (水题)状态转移
    Codeforces Round #628 (Div. 2)C. Ehab and Path-etic MEXs(构造+树)
    POJ3735——mat乘法优化
    HDU5667——费马小定理
    UCF Local Programming Contest 2012(Practice) D. The Clock Algorithm
    嵌套递推——矩阵快速幂
  • 原文地址:https://www.cnblogs.com/sonwnja/p/6802844.html
Copyright © 2011-2022 走看看