Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
выполненные работы / л.р.3 Архангельский М.В. БСТ2154.docx
Скачиваний:
3
Добавлен:
07.04.2025
Размер:
1.95 Mб
Скачать

Задание 2. Системные вызовы вашей программы

Выполните разбор системных вызовов для небольшой программы, написанной самостоятельно, и заполните таблицу 2 из задания 1.

Создам простую программу на языке Cи в файле proglr2.c и скомпилирую код командой gcc -o programma proglr2.c

Запустим программу командой strace -r ./programma

Заполним таблицу системных вызовов

Системный вызов

Описание вызова

Входные параметры

Время выполнения, мкс

Возвращаемое значение

1

execve

Выполнение новой команды в текущем процессе

"./programma" - имя исполняемого файла

["./programma"], 0x7ffee0276e78 - аргументы вызова

552

0 — успешное выполнение

2

openat

Открытие файла

AT_FDCWD — директория, в которой лежит файл будет точкой отсчета.

"/lib/x86_64-linux-gnu/libc.so.6" путь к файлу

O_RDONLY|O_CLOEXEC — только чтение

214

3- Файловый дескриптор

3

mmap

Отображение предварительно открытого файла / резервирование пространства в адресном пространстве процесса.

NULL — укаатель на пространство памяти

102691 — количество считываемых байтов

PROT_READ — режимы защиты памяти

MAP_PRIVATE — тип считываемого объекта

3 — чтение не из файла

0 - смещение

240

0x762702b59000 — указатель на память

4

read

Чтение из файла

3 - Файловый дескриптор

указатель на буфер,

832 — количество считываемых байтов

234

832 — количество считанных байтов

5

close

Закрытие файла

3 - Файловый дескриптор

223

0 - успех

Задание 3. Сборка и загрузка модуля в ядро Linux

1. Установите необходимые пакеты:

apt-get install gcc make linux-headers-$(uname -r)

2. Создайте файл модуля:

mkdir kmod-hello_world

cd kmod-hello_world/

touch ./mhello.c

c содержимым:

#define MODULE

#include <linux/module.h>

#include <linux/init.h>

#include <linux/kernel.h>

MODULE_LICENSE("GPLv3");

int init_module(void){

printk("<1> Hello,World\n");

return 0;

}

void cleanup_module(void){

printk("<1> Goodbye.\n");

}

3. Создайте Makefile: touch ./Makefile c содержимым:

obj-m += mhello.o

hello-objs := mhello.c

all:

make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

clean:

make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

Перед командой "make" необходимо использовать табуляцию для создания отступа, а не пробелы.

4. Соберите модуль и установите его с помощью insmod.

make all

insmod path/to/module.ko

Установим модуль через команду insmod mhello.ko и посмотрим результат в dmesg.

5. Выгрузите модуль с помощью команды rmmod и включите снимок экрана вывода в отчет.

Выгружаем модуль командой rmmod mhello.ko и проверяем командой dmesg