zoukankan      html  css  js  c++  java
  • Linux中使用gdb dump内存

    在应急响应中,我们往往会有dump出某一块内存下来进行分析的必要。今天要讲的是利用gdb命令dump出sshd进程的内存。

    按照 Linux 系统的设计哲学,内核只提供dump内存的机制,用户想要dump什么样的内存,dump多少内存是属于策略问题,由用户来决定。

    在真实的使用场景中,主要有两种使用方式:

    • 一种是dump某一个进程的地址空间来供用户在进程挂掉之后debug分析,也就是通常所说的coredump
    • 另一种就是dump整个系统的内存空间,以便于系统管理员debug分析系统挂掉的原因,也就是通常所说的 kdump,由于dump内存的逻辑依然需要系统可以正常工作,管理系统的各种资源,所以kdump整个过程依赖kexec和一个额外的dump内核来保证整个流程正确的执行。

    以下演示的是dump出某一个进程(sshd)的内存。

    ps aux | grep sshd    #过滤出sshd进程,记录其PID
    cat /proc/1431/maps   #查看1431进程的内存地址
    

    启动gdb,将sshd进程attach到gdb上

    gdb attach 1431

    dump指定内存地址到指定的目录下

    dump memory /tmp/sshd.dump 0x7f25c2a4e000 0x7f25c2a59000  #这里只dump sshd进程的第一块内存
      
    dump memory /tmp/sshd.dump 0x7f25c2a4e000 0x7f25c2e61000  #dump了指定的内存块
    # "dump memory"是命令 
    # "/tmp/sshd.dump"是我们想保存dump出的内容的路径。 
    # 两个hex是内存地址区间,这跟/proc/1431/maps的格式有些不一样。这是以0x开头的16进制表示的。

    之后,去/tmp目录下,可以看到dump出的sshd.dmp内存

    strings -10 sshd.dump   #查看sshd.dump内存中至少大于10字符的字符

  • 相关阅读:
    JSP_EL使用
    Ajax乱码问题
    Myeclipse安装svn插件(link方式)
    JAVA多线程通信
    Java序列化与反序列化(Serializable)
    Java 字符流实现文件读写操作(FileReader-FileWriter)
    Java 字节流实现文件读写操作(InputStream-OutputStream)
    JAVA环境变量配置
    Flex设置外部浏览器
    J2EE5(Servlet2.5)对EL表达式的支持
  • 原文地址:https://www.cnblogs.com/csnd/p/11807654.html
Copyright © 2011-2022 走看看