Установка защитных битов для всего адресного пространства - PullRequest
0 голосов
/ 24 сентября 2011

Хорошо, я хочу предоставить доступ только для чтения ко всем страницам в адресном пространстве в Linux.Всякий раз, когда будет написана страница, я предоставлю ей доступ для записи в обработчике сигнала SIGSEGV.Для 32-битных это просто, поскольку адресное пространство занимает всего 4 ГБ, поэтому установка битов для каждой страницы не займет много времени, но как мне подойти к этой проблеме для 64-битного процесса, поскольку адресное пространство почтибесконечен в этом случае.

Для меня не проблема, если я ограничу размер адресного пространства с помощью ulimit -v, но люди сказали, что адрес не будет линейным.Сейчас в голове болит мысль о том, как мне решить эту проблему.Любая помощь в этом отношении будет принята с благодарностью.Скажите, пожалуйста, наиболее эффективный способ установить доступ на чтение всех страниц для 64-битной программы.

1 Ответ

4 голосов
/ 24 сентября 2011

Чтобы избежать защиты всего адресного пространства, защищайте только используемые страницы.И перехватывайте системные вызовы, которые изменяют адресное пространство (mmap, brk, возможно создание потоков и т. Д.), Чтобы вы могли защитить эти страницы.

Обратите внимание, что ваш обработчик сигналов не может работать без возможности записи в свой стек(и не в состоянии выполнить его код), поэтому существуют некоторые фундаментальные проблемы, помимо того, что они просто большие 64-битные.

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