首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >虚拟内存与内核转储的关系

虚拟内存与内核转储的关系
EN

Stack Overflow用户
提问于 2015-08-28 13:43:24
回答 1查看 1.1K关注 0票数 5

我有一个可执行文件和一个gcore。

我用gcore创建了核心转储文件。

现在,我想将可执行文件的虚拟地址映射到核心转储。

我知道核心转储是一个可执行文件的内存转储,如果我想从核心转储中分析虚拟地址的话。我是否可以假设虚拟地址0x0000等于偏移核心转储的0x0000

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-28 13:53:07

我知道核心转储是可执行文件的内存转储,

不是的。gdb中的核心转储(gcore表示您正在使用此格式)通常采用ELF格式,因此有一个广泛的标头来定义什么映射到什么。

我不太清楚GDB/linux在转储核心时对地址空间损坏做了多少使用,但您不能假设文件偏移量x将映射到内存偏移量x --因为虚拟地址空间可以跨越巨大的地址空间,它只使用几页。(例如,64位进程可以有一个比硬盘大得多的虚拟地址空间,而它可能实际上只保留了小得多的内存,即便如此,并不是所有的页面都需要实际分配)。

但是,GDB可以读取这些头文件,如果您要求它打印内容(例如使用printx命令),它将提供正确的内容。

如果您想要读取核心转储文件,那么正确的做法就是使用GDB的功能来读取。幸运的是,有libgdb,它正是用于C/C++应用程序的。基本上,让我们像坐在GDB前面的用户一样与gdb对话。因此,了解如何在GDB中执行您想要的操作,然后使用libgdb编程完成它。

如果您想要这样做,那么您可以直接使用Binary File Descriptor Library来解析和表示核心转储(不要这样做,这很麻烦,实际上,GDB正是您想要使用的)。它是GDB的重要组成部分,如果不重新实现许多GDB例程,就很难让它与您自己的C++程序一起运行。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32272537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档