Во время сбоя у меня есть обработчик после сбоя, в котором я пытаюсь записать то, что находится в определенных областях памяти
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 можно восстановить)
или то, что я пытаюсь сделать, неосуществимо
РЕДАКТИРОВАТЬ:
- Общая картина: в моем процессе я хочу использовать 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);