Как прочитать дамп памяти в двоичном формате из GDB?

#linux #c 11 #gdb

#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 OK или

б. Возможно ли вызвать gdb-dump команду из с в коде (поскольку дамп из gdb может быть восстановлен)

или то, что я пытаюсь сделать, неосуществимо


Редактировать:

  1. Общая картина: в моем процессе я хочу использовать ввод-вывод с отображением в память — во время инициализации я выделяю огромные страницы и mmap() их на /dev устройство, и аналогично я mmap() также использую энергонезависимую область dimm (мы не используем обычный malloc)

При этом; когда процесс утверждает / ядра, я не могу получить доступ к огромным страницам или энергонезависимым областям dimm

  1. Я пытался создать пост-фатальный хук, при котором я сбрасываю эти области памяти в двоичный файл (ы). В этом вопросе я просил восстановить эти области памяти в ядро GDB, чтобы проверить эти области памяти

Аргументы в mmap()

 fp = open("/dev/mem", O_RDWR);
mmap(NULL,
     region.size,
     PROT_READ | PROT_WRITE,
     MAP_SHARED | MAP_NORESERVE,
     fp,
     phybaseaddr);

  

Комментарии:

1. У вас есть xyproblem.info ? «то, что я пытаюсь сделать, неосуществимо» — вы не сказали нам, чего вы пытаетесь достичь, и «восстановление» данных в дамп ядра (без активного процесса и связанной с ним памяти) не имеет смысла.