Защитите все адресное пространство с помощью mprotect

Для моего университетского проекта мне нужно ЗАПИСАТЬ, чтобы защитить все адресное пространство процесса. Я читал / Proc / самостоятельно / карты файл и разбор сопоставления.

Так что для каждой записи формата 08048000-0804c000 r-xp 00000000 08:03 7971106 /bin/cat, Я читаю первые две записи (здесь 08048000 & 0804c000), переводя их в десятичные. Предположим, что десятичный эквивалент & В соответственно. Тогда я делаю mprotect((int*)A, B-A, PROT_READ). Но этот подход дает мне ошибку сегментации. Я не могу узнать, что я сделал не так здесь. Может быть, у меня есть некоторый пробел в знаниях, который вызывает проблему. Кто-то может дать мне несколько советов?

1

Решение

Предполагая, что ваша реализация верна, я все же ожидал бы увидеть ошибки сегментации.

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

Скорее всего, это произойдет, когда вы вернетесь из mprotect () после «защиты» стека.

Думая немного больше, даже возможно, что вы получаете ошибки сегментации в то время как проведение память (то есть разделяемая библиотека или ваш исполняемый код) после того, как вы ее «защитили».

Фактически, все биты памяти, где можно безопасно применять флаги только для чтения / не выполнять, уже имеют эти флаги.

Я подозреваю, что это понимание, которое этот университетский проект должен был дать вам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]