一尘不染

GDB:列出崩溃进程的所有映射内存区域

linux

我已经从x86 Linux计算机(如果重要的是内核2.6.35-22)上的一个死进程中获得了一个全堆核心转储,我正在尝试在GDB中进行调试。

我可以使用一个GDB命令来表示“向我显示此进程分配的所有内存地址区域的列表吗?” 换句话说,我能找出我可以在此转储中检查的所有可能的有效内存地址吗?

我问的原因是,我需要在 整个进程堆中 搜索某个二进制字符串,并且要使用该find命令,我需要具有一个起始地址和结束地址。简单地从0x00到0xff
..搜索是行不通的,因为find一旦遇到无法访问的地址,它就会暂停:

(gdb)查找/ w 0x10000000、0xff000000、0x12345678

警告:无法访问目标内存,地址为0x105ef883,暂停搜索。

因此,我需要获取内存中所有可读地址区域的列表,以便可以一次搜索它们。

(我需要做的原因 是,我需要找到所有的结构在内存里 某个地址。)

没有show memshow procinfo meminfo proc似乎做什么,我需要。


阅读 568

收藏
2020-06-03

共1个答案

一尘不染

在GDB 7.2中:

(gdb) help info proc
Show /proc process information about any running process.
Specify any process id, or use the program being debugged by default.
Specify any of the following keywords for detailed info:
  mappings -- list of mapped memory regions.
  stat     -- list a bunch of random process info.
  status   -- list a different bunch of random process info.
  all      -- list all available /proc info.

您需要info proc mappings,除非它在没有时/proc(例如在pos-mortem调试期间)不起作用。

试试吧maintenance info sections

2020-06-03