我从 x86 Linux 机器上的死进程(内核 2.6.35-22,如果重要的话)得到了一个全堆核心转储,我正试图在 GDB 中调试它。
有没有我可以使用的 GDB 命令,意思是“显示此进程分配的所有内存地址区域的列表?”换句话说,我能弄清楚我可以在这个转储中检查的所有可能的有效内存地址吗?
我问的原因是我需要在 整个进程堆中 搜索某个二进制字符串,并且为了使用 find
命令,我需要有一个开始和结束地址。简单地从 0x00 搜索到 0xff.. 不起作用,因为 find
一旦遇到无法访问的地址就会停止:
(gdb) 查找 /w 0x10000000, 0xff000000, 0x12345678
警告:无法访问 0x105ef883 处的目标内存,停止搜索。
所以我需要获取内存中所有可读地址区域的列表,这样我就可以一次搜索一个。
(我需要这样做的 原因 是我需要找到内存中 指向 某个地址的所有结构。)
show mem
, show proc
, info mem
, info proc
似乎都不需要。
原文由 Crashworks 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 GDB 7.2 中:
你想要
info proc mappings
,除非它在没有/proc
时不起作用(例如在事后调试期间)。尝试
maintenance info sections
代替。