Как создать резервную копию памяти в C в случае сбоя?

#c #posix #memory-mapped-files #memory-mapping

Вопрос:

Я хочу написать программу на c для Linux (система posix). Я хочу защитить некоторые страницы памяти, чтобы в случае сбоя программы или ее завершения кем-либо другим память на этих защищенных страницах синхронизировалась с физическими файлами. Я знаю, что могу использовать mmap связь между виртуальными страницами и каким-либо файлом, но в руководствах указано, что нет гарантии, что содержимое будет синхронизировано, если я не msync позвоню перед вызовом munmap . Затем msync предлагает некоторые флаги для асинхронного выполнения, но это не гарантирует мне того, что мне нужно.

Итак, как мне сказать своей системе: «Эй, я хочу, чтобы вы записали эти страницы в этот файл, когда я завершу работу!»? Возможно ли это вообще?

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

1. Вы изучали обработчики сигналов?

2. @Джеффри Нет. Но гарантируется ли, что обработчик получит возможность позвонить msync в тот самый момент, когда его вот-вот убьют? Я хочу что-то вроде посмертной сделки с системой. Хотел бы зарезервировать место на кладбище для моей программы.

3. Если вы не предпримете упреждающие меры для синхронизации памяти, у вас никогда не будет никаких гарантий. ОС всегда может убить ваш процесс без сигнала, если захочет. Но обработка сигналов будет охватывать обычные случаи, такие как аварии

4. В тот момент, когда противник входит в систему как root, игра в любом случае окончена.

5. @cnikbesku Ваш лучший выбор, вероятно, не участвовать в гонке вооружений, которая уже проиграна. Если у незамеченного злоумышленника есть root-доступ, игра, по сути, окончена. Бесконечно ценнее вкладывать усилия в попытки улучшить безопасность сети или системы, чтобы такой ситуации не произошло, в отличие от попыток создать программу, устойчивую к атакам корневого пользователя.