защита доступа к записи на уровне байтов? - PullRequest
1 голос
/ 21 сентября 2011

защита страницы для чтения и / или записи возможна, так как в записи таблицы страниц есть биты, которые можно включать и выключать на уровне ядра. Существует ли способ защиты определенной области памяти от доступа для записи, скажем, в структуре C есть определенные переменные, которые должны быть защищены от записи, и любой доступ к ним для записи запускает segfault и дамп ядра. Это что-то вроде уменьшенной функциональности mprotect (), так как она работает на уровне страниц, есть ли механизм, похожий на подобные вещи на уровне байтов в пространстве пользователя.

спасибо, Капил Упадхайай.

Ответы [ 2 ]

5 голосов
/ 21 сентября 2011

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

Конечно, такой подход приведет к тому, что программы будут очень медленными и тратят много ресурсов. Это, вероятно, нежизнеспособно, кроме как в качестве метода отладки, и valgrind может удовлетворить эту потребность гораздо эффективнее без необходимости изменять вашу программу ...

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

Один из способов, хотя и очень медленный, - защитить всю страницу, на которой находится объект.Всякий раз, когда происходит доступ для записи на эту страницу, ваш пользовательский обработчик для неверного доступа к странице вызывается и разрешает ситуацию, быстро снимая защиту страницы, записывая данные, а затем снова защищая страницу.

Это хорошо работает для однопоточных программ, я не уверен, что делать для многопоточных программ.

Эта идея, вероятно, не нова, так что вы можете найти некоторую информацию или даже готовыйсделал реализацию этого.

...