2012-02-24 2 views
1

Есть ли какой-либо системный вызов или функция, которая может получить атрибут страницы, такой как читаемый, записываемый, исполняемый по адресу страницы? Я знаю, что мы можем использовать mprotect для установки атрибута страниц, но я понятия не имею, можем ли мы получить атрибут страниц. Любые комментарии приветствуются.Получить атрибут страниц с помощью системного вызова в Linux

ответ

3

Нет. Вам нужно использовать интерфейс proc, который содержит много информации о каждом процессе в разных файлах. Информация, которую вы ищете, находится в открытом виде, в /proc/<pid>/maps. Вы можете посмотреть на него для текущего процесса, запустив:

$ cat /proc/$$/maps 

Вы можете найти более подробную информацию в man 5 proc.

Пример, приведенный в ссылке выше является:

address   perms offset dev inode pathname 
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm 
08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm 
08058000-0805b000 rwxp 00000000 00:00 0 
40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so 
40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so 
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so 
40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so 
4013e000-40142000 rw-p 00000000 00:00 0 
bffff000-c0000000 rwxp 00000000 00:00 0 

Как можно видеть, разрешения являются вторым (разделенных пробелами) поле там. Так из программы (например, в C, так как вы упомянули mprotect(), вы можете открыть /proc/$$/maps с fopen(), а затем использовать fgets() или scanf(), чтобы вытащить данные. Вы просто ищете что perms области спектра, где ваша страница находится.

+0

'/ proc/*/smaps' - более подробный формат. –

+0

@ jørgensen Абсолютно! Хотя OP только ищет простые разрешения на данной странице. –

Смежные вопросы