我已经从x86 Linux计算机(如果重要的是内核2.6.35-22)上的一个死进程中获得了一个全堆核心转储,我正在尝试在GDB中进行调试。
我可以使用一个GDB命令来表示“向我显示此进程分配的所有内存地址区域的列表吗?” 换句话说,我能找出我可以在此转储中检查的所有可能的有效内存地址吗?
我问的原因是,我需要在 整个进程堆中 搜索某个二进制字符串,并且要使用该find命令,我需要具有一个起始地址和结束地址。简单地从0x00到0xff ..搜索是行不通的,因为find一旦遇到无法访问的地址,它就会暂停:
find
(gdb)查找/ w 0x10000000、0xff000000、0x12345678 警告:无法访问目标内存,地址为0x105ef883,暂停搜索。
(gdb)查找/ w 0x10000000、0xff000000、0x12345678
警告:无法访问目标内存,地址为0x105ef883,暂停搜索。
因此,我需要获取内存中所有可读地址区域的列表,以便可以一次搜索它们。
(我需要做的原因 是 是,我需要找到所有的结构在内存里 的 某个地址。)
没有show mem,show proc,info mem,info proc似乎做什么,我需要。
show mem
show proc
info mem
info proc
在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调试期间)不起作用。
info proc mappings
/proc
试试吧maintenance info sections。
maintenance info sections