如何从GDB中读取二进制形式的内存转储?

时间:2019-03-13 01:57:07

标签: linux c++11 gdb

发生崩溃时,我有一个崩溃后处理程序,在这里我尝试将某些内存区域中的内容转储出去

auto memdump = std::fstream("FileMemDump.bin", std::ios::out | std::ios::binary);
auto memRegion = getMemoryRegion();
std::cout << "Memory region start: " << memRegion.start << " size: " << memRegion.size;
memdump.write((char*)memRegion.start, memRegion.size);
memdump.close();

,并且在文件创建核心文件之后 因此,我以以下方式加载内核后:

#gdb ./exec ./core.file

我给出了恢复命令;起始地址是从上面的日志中打印出来的...,但失败并显示以下消息

(gdb) restore ./FileMemDump.bin binary 0 0xFFAA0000
You can't do that without a process to debug.

a。是将选项赋予std::fstream确定还是

b。是否可以在代码中使用{来调用gdb-dump命令(因为可以恢复gdb的转储)

或者我试图做的事不可行


编辑:

  1. 总体情况:在我的过程中,我想使用内存映射的IO-在初始化时,我分配了大页面并将其mmap()分配给/dev设备,类似地,我{{1} }以及非易失性dimm区域(我们不使用常规的malloc)

有了这个;当过程断言/产生核心时,我将无法访问大页面或非易失性暗淡区域

  1. 我试图使用一个致命的钩子,将这些内存区域转储到二进制文件中。在这个问题中,我要求将这些内存区域还原到GDB核心中以检查这些内存区域

mmap()的参数

mmap()

0 个答案:

没有答案