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字符的字符

  • 相关阅读:
    linux目录特殊权限 t :禁止删除(粘滞)权限
    牛X 好用的sshd_config:ChrootDirectory:特别注意【该目录必须是只能且仅能root用户有w权限!】
    mysql FIND_IN_SET 尝试性优化
    Java base64 添加data URI
    【java】itext5 添加页眉页脚
    【java】一些图片印章的处理方法
    授权MySQL root 用户所有权限
    法学 五院四系
    最具投资前景
    JCL ABEND CODE
  • 原文地址:https://www.cnblogs.com/csnd/p/11807654.html
Copyright © 2011-2022 走看看