当前位置: 首页 > 面试题库 >

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

贺元明
2023-03-14
问题内容

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

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

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

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

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

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

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

没有show memshow procinfo meminfo 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

  • 对此有什么建议吗?

  • 我需要检查为什么exec函数停止我的php脚本。 我在HTTP查询中调用了“exec”函数中的bat文件(但我遇到了passthru、system和proc_open的问题),2分钟后我得到了一个错误代码500(没有详细信息)。但是我的bat文件总是在后台运行(我可以看到创建的文件…)我是这样使用它的: 在$输出中我什么都得不到,在phperror_log什么都没有...我添加了以下参数: 同样的