最佳答案
我从 x86 Linux 机器上的一个死进程(内核2.6.35-22,如果需要的话)获得了一个完整的堆内核转储,我正试图在 GDB 中进行调试。
是否有一个 GDB 命令,我可以使用,这意味着“给我一个列表,所有的内存地址区域分配的进程?”换句话说,我能够找出在这个转储中可以检查的所有可能的有效内存地址吗?
我这样问的原因是,我需要在 整个进程堆中搜索某个二进制字符串,为了使用 find
命令,我需要有一个开始和结束地址。简单地从0x00搜索到0xff。.无法工作,因为 find
遇到无法访问的地址时会立即停止:
(gdb) find/w 0x1000000,0xff00000, 0x12345678
警告: 无法访问0x105ef883的目标内存,停止 搜索。
所以我需要得到一个列表,列出内存中所有可读的地址区域,这样我就可以一次搜索一个地址区域。
(我需要执行 那个的原因是我需要找到内存中指向 在的所有结构体的某个地址。)
show mem
,show proc
,info mem
,info proc
都不能满足我的要求。