Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Операционные системы. Лабораторная работа 3

Вариант

  • ОС: Linux
  • ioctl: vm areas

Задание

Разработать комплекс программ на пользовательском уровне и уровне ярда, который собирает информацию на стороне ядра и передает информацию на уровень пользователя, и выводит ее в удобном для чтения человеком виде. Программа на уровне пользователя получает на вход аргумент(ы) командной строки (не адрес!), позволяющие идентифицировать из системных таблиц необходимый путь до целевой структуры, осуществляет передачу на уровень ядра, получает информацию из данной структуры и распечатывает структуру в стандартный вывод. Загружаемый модуль ядра принимает запрос через указанный в задании интерфейс, определяет путь до целевой структуры по переданному запросу и возвращает результат на уровень пользователя.

Интерфейс передачи может быть один из следующих:

  1. syscall - интерфейс системных вызовов.
  2. ioctl - передача параметров через управляющий вызов к файлу/устройству.
  3. procfs - файловая система /proc, передача параметров через запись в файл.
  4. debugfs - отладочная файловая система /sys/kernel/debug, передача параметров через запись в файл.

Целевая структура может быть задана двумя способами:

  1. Именем структуры в заголовочных файлах Linux
  2. Файлом в каталоге /proc. В этом случае необходимо определить целевую структуру по пути файла в /proc и выводимым данным.

Интерфейс передачи между программой пользователя и ядром: ioctl - передача параметров через управляющий вызов к файлу/устройству. Целевая структура: Именем структуры в заголовочных файлах Linux.

Решение

Общая схема взаимодействия

Комплекс программ (модуль ядра + утилита на уровне пользователя):

  • Принимает на вход PID из аргументов командной строки в пользовательской программе.
  • Посылает этот PID в модуль ядра через ioctl.
  • Модуль ядра собирает информацию о VMA (vm_area_struct) целевого процесса.
  • Модуль ядра возвращает информацию обратно в пользовательскую программу.
  • Пользовательская программа выводит результат в удобном для чтения виде.

Последовательность запуска

Для сборки использовался CLion

  1. Соберите vma_driver.c и vma_user.c

Для более подробной информации о шагах 2-7, см. 1 или 2

  1. Напишите свой ключ x509.genkey. В текущем файле необходимо указать собственное значение CN.

  2. Сгенерируйте пару ключей запуская key_creation.sh.

  3. С готовой парой ключей запустите key_installation.sh.

  4. Перезапустите систему. При перезагрузке если у вас Linux с UEFI Secure Boot, то выберите Enroll MOK > Continue > Yes > Введите пароль установленный в предыдущем шаге.

  5. Для подтверждения установки ключа можете запустить mokutil -l.

  6. Подпишите vma_driver.ko с помощью sign_module.sh.

  7. Загрузите модуль в систему с помощью load_driver.sh.

  8. Запустите vma_user. Пример: sudo cmake-build-debug/user/vma_user 3640, где 3640 - PID. Вставьте соответсвующий путь к vma_user.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages