虚拟内存和核心转储之间的关系
relationship between virtual memory and core dump
我有一个可执行文件和一个gcore.
我用gcore创建了core dump文件
现在,我想将可执行文件的虚拟地址映射到核心转储。
我知道核心转储是可执行文件的内存转储,如果我想从核心转储中分析虚拟地址。我是否可以假设虚拟地址0x0000
等于核心转储的偏移量0x0000
?
我知道core dump是一个可执行文件的内存转储,
。gdb中的核心转储(gcore表示您正在使用它)通常是ELF格式,因此有一个扩展的头文件定义什么映射到什么。
我不太确定GDB/linux在转储内核时对地址空间进行了多少使用,但是您不能假设文件偏移量x将映射到内存偏移量x—因为虚拟地址空间可以跨越巨大的地址空间,它只使用几个页面。(如。一个64位进程可以有一个比你的硬盘大得多的虚拟地址空间,而它可能只有一个小得多的实际预留内存,即使是这样,也不是所有的页面都需要分配。
然而,GDB可以读取这些头,如果你要求它打印东西(例如使用print
或x
命令),它会给你正确的东西。
如果您想读取核心转储文件,那么正确的做法是使用GDB的功能来读取。幸运的是,有libgdb,它正好为您的C/c++应用程序做了这一点。它基本上让您与GDB对话,就好像您是坐在GDB shell前的用户一样。因此,找出如何在GDB中做您想做的事情,然后使用libgdb以编程方式完成它。
如果你想做底层(不要这样做,这很麻烦,实际上GDB才是你真正想要使用的),你可以直接使用二进制文件描述符库来解析和表示核心转储。它是GDB的重要组成部分,如果不重新实现大量的GDB例程,将很难让它与您自己的c++程序一起运行。
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- Objective-C源代码和clang -rewrite-objc C++代码之间有什么关系?