#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 может быть восстановлен)
или то, что я пытаюсь сделать, неосуществимо
Редактировать:
- Общая картина: в моем процессе я хочу использовать ввод-вывод с отображением в память — во время инициализации я выделяю огромные страницы и
mmap()
их на/dev
устройство, и аналогично яmmap()
также использую энергонезависимую область dimm (мы не используем обычный malloc)
При этом; когда процесс утверждает / ядра, я не могу получить доступ к огромным страницам или энергонезависимым областям dimm
- Я пытался создать пост-фатальный хук, при котором я сбрасываю эти области памяти в двоичный файл (ы). В этом вопросе я просил восстановить эти области памяти в ядро 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 ? «то, что я пытаюсь сделать, неосуществимо» — вы не сказали нам, чего вы пытаетесь достичь, и «восстановление» данных в дамп ядра (без активного процесса и связанной с ним памяти) не имеет смысла.