Linux中使用gdb dump内存

在应急响应中,我们往往会有dump出某一块内存下来进行分析的必要。今天要讲的是利用gdb命令dump出sshd进程的内存。
按照 Linux 系统的设计哲学,内核只提供dump内存的机制,用户想要dump什么样的内存,dump多少内存是属于策略问题,由用户来决定。
在真实的使用场景中,主要有两种使用方式:

  • 一种是dump某一个进程的地址空间来供用户在进程挂掉之后debug分析,也就是通常所说的coredump
  • 另一种就是dump整个系统的内存空间,以便于系统管理员debug分析系统挂掉的原因,也就是通常所说的 kdump,由于dump内存的逻辑依然需要系统可以正常工作,管理系统的各种资源,所以kdump整个过程依赖kexec和一个额外的dump内核来保证整个流程正确的执行。
【Linux中使用gdb dump内存】以下演示的是dump出某一个进程(sshd)的内存。
ps aux | grep sshd#过滤出sshd进程,记录其PID cat /proc/1431/maps#查看1431进程的内存地址

Linux中使用gdb dump内存
文章图片

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

Linux中使用gdb dump内存
文章图片

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进制表示的。

Linux中使用gdb dump内存
文章图片

之后,去/tmp目录下,可以看到dump出的sshd.dmp内存
Linux中使用gdb dump内存
文章图片

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

Linux中使用gdb dump内存
文章图片

    推荐阅读