Есть ли какой-либо системный вызов или функция, которая может получить атрибут страницы, такой как читаемый, записываемый, исполняемый по адресу страницы? Я знаю, что мы можем использовать mprotect для установки атрибута страниц, но я понятия не имею, можем ли мы получить атрибут страниц. Любые комментарии приветствуются.Получить атрибут страниц с помощью системного вызова в Linux
1
A
ответ
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
области спектра, где ваша страница находится.
Смежные вопросы
- 1. Последовательность потока системного вызова Linux
- 2. Создание системного вызова в Linux
- 3. Реализация системного вызова Linux 'socketcall'
- 4. Добавление системного вызова в ядро linux 3.8.8
- 5. Каков тип аргументов системного вызова в Linux?
- 6. магических чисел в Linux перезагрузки() системного вызова
- 7. Эквивалент системного вызова sync_file_range Linux в Windows?
- 8. Атомность системного вызова writev() в Linux
- 9. Что делает Linux при создании системного вызова?
- 10. Ограничение доступа системного вызова для приложения Linux
- 11. 64-разрядная версия системного вызова socketcall Linux
- 12. Сборка ошибка сегментации Linux системного вызова
- 13. Сделать калькулятор с помощью системного вызова execlp
- 14. системного вызова() для вызова tkill()
- 15. Получить вывод ошибки системного вызова?
- 16. Получить размер файла с стат системного вызова
- 17. Закрытие нити с помощью системного вызова select()?
- 18. Изменение системного вызова
- 19. Есть ли обратная операция для системного вызова vmsplice() в Linux?
- 20. измерение скорости системного вызова
- 21. Измерять время на C++ для команды системного вызова в Linux
- 22. Тестирование системного вызова в qemu
- 23. Как получить имя системного вызова в xv6?
- 24. Ожидание процесса с использованием системного вызова linux wait
- 25. вызов ioctl системного вызова с использованием jna
- 26. Поведение системного вызова fork() в Linux в этом коде
- 27. более чем одной команды для системного вызова в Linux
- 28. Написание нового системного вызова
- 29. Получение значения системного вызова
- 30. Переключение системного вызова модуля ядра
'/ proc/*/smaps' - более подробный формат. –
@ jørgensen Абсолютно! Хотя OP только ищет простые разрешения на данной странице. –