我已经从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
似乎做什么,我需要。
在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
。
前言 进程内存映像表 在程序内部打印内存分布信息 在程序内部获取完整内存分布信息 后记 参考资料 前言 在阅读《UNIX 环境高级编程》的第 14 章时,看到一个“打印不同类型的数据所存放的位置”的例子,它非常清晰地从程序内部反应了“进程的内存映像”,通过结合它与《Gcc 编译的背后》和《缓冲区溢出与注入分析》的相关内容,可以更好地辅助理解相关的内容。 进程内存映像表 首先回顾一下《缓冲区溢出与注
系统调用在调用进程的虚拟地址空间中提供映射,将文件或设备映射到内存中。 下面是两种类型 - 文件映射或文件支持的映射 - 此映射将进程的虚拟内存区域映射到文件。 这意味着读取或写入这些内存区域会导致文件被读取或写入。这是默认的映射类型。 匿名映射 - 此映射映射进程的虚拟内存区域,不受任何文件的支持。 内容被初始化为零。 这种映射类似于动态内存分配(malloc()),在某些实现中用于某些分配。
我一直在使用G1垃圾收集器经历Java VM崩溃。我们得到使用以下签名生成的hs_err_pid.log文件:
问题 你想内存映射一个二进制文件到一个可变字节数组中,目的可能是为了随机访问它的内容或者是原地做些修改。 解决方案 使用 mmap 模块来内存映射文件。 下面是一个工具函数,向你演示了如何打开一个文件并以一种便捷方式内存映射这个文件。 import os import mmap def memory_map(filename, access=mmap.ACCESS_WRITE): siz
对此有什么建议吗?
我在单个节点上使用hadoop 1.0.1,并尝试使用python 2.7流式传输制表符分隔的文件。我可以让Michael Noll的字数计数脚本使用hadoop/python运行,但无法让这个极其简单的映射器和减速器工作,只是复制文件。这是映射器: 这是减速器: 以下是输入文件的一部分: mapper和reducer在linux中运行良好: 但在我修改映射器和reducer之后,将输入文件移动到