Как прочитать дамп памяти в двоичном виде из GDB? - PullRequest
5 голосов
/ 13 марта 2019

Во время сбоя у меня есть обработчик после сбоя, в котором я пытаюсь записать то, что находится в определенных областях памяти

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

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

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


РЕДАКТИРОВАТЬ:

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

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

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

Аргументы для mmap ()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...