Я имел в виду: http://www-users.cs.umn.edu/~boutcher/kprobes/kprobes.txt.html, чтобы понять kprobe. Я использовал kprobe_example.c, как указано в документе.
Я скомпилировал его с помощью makefile (код взят из того же документа)
Я получил ошибки компиляции, потому что у меня версия ядра 4.2 и некоторые поля были изменены в struct pt_regs. Поэтому я заменил eip на ip, а eflag на flag в kprobe_example.c, который выглядит следующим образом: /murlee417/87c2eb43a6afa1954b05404a07813e81. Затем я смог успешно скомпилировать его.
Теперь, как пользователь root, я сделал:
#insmod kprobe_example.ko
и я получил:
insmod: ERROR: could not insert module kprobe_example.ko: Operation not permitted
Мой буфер сообщений имеет:
#dmesg
[ 4537.478408] Couldn't find do_fork to plant kprobe
Пожалуйста, помогите мне решить эту ошибку и заставить insmod работать.
I got compilation errors because my kernel version is 4.2 and some fields were changed in struct pt_regs.
- Изменяется не только одна структура. Определение функцииdo_fork
становится зависимым от конфигурации макрос HAVE_COPY_THREAD_TLS. Возможно, этот макрос определен для вашего случая (проверьте файл.config
в каталоге сборки ядра), поэтому функция просто отсутствует. Если это так, просто измените имя функции на probe. - person Tsyvarev   schedule 19.09.2016