#c #posix #memory-mapped-files #memory-mapping
Вопрос:
Я хочу написать программу на c для Linux (система posix). Я хочу защитить некоторые страницы памяти, чтобы в случае сбоя программы или ее завершения кем-либо другим память на этих защищенных страницах синхронизировалась с физическими файлами. Я знаю, что могу использовать mmap
связь между виртуальными страницами и каким-либо файлом, но в руководствах указано, что нет гарантии, что содержимое будет синхронизировано, если я не msync
позвоню перед вызовом munmap
. Затем msync
предлагает некоторые флаги для асинхронного выполнения, но это не гарантирует мне того, что мне нужно.
Итак, как мне сказать своей системе: «Эй, я хочу, чтобы вы записали эти страницы в этот файл, когда я завершу работу!»? Возможно ли это вообще?
Комментарии:
1. Вы изучали обработчики сигналов?
2. @Джеффри Нет. Но гарантируется ли, что обработчик получит возможность позвонить
msync
в тот самый момент, когда его вот-вот убьют? Я хочу что-то вроде посмертной сделки с системой. Хотел бы зарезервировать место на кладбище для моей программы.3. Если вы не предпримете упреждающие меры для синхронизации памяти, у вас никогда не будет никаких гарантий. ОС всегда может убить ваш процесс без сигнала, если захочет. Но обработка сигналов будет охватывать обычные случаи, такие как аварии
4. В тот момент, когда противник входит в систему как root, игра в любом случае окончена.
5. @cnikbesku Ваш лучший выбор, вероятно, не участвовать в гонке вооружений, которая уже проиграна. Если у незамеченного злоумышленника есть root-доступ, игра, по сути, окончена. Бесконечно ценнее вкладывать усилия в попытки улучшить безопасность сети или системы, чтобы такой ситуации не произошло, в отличие от попыток создать программу, устойчивую к атакам корневого пользователя.