Ответ 1
Это может помочь вам: http://cormander.com/2011/12/how-to-hook-into-hijack-linux-kernel-functions-via-lkm/
Почему бы вам просто не зацепить функцию, которая вызывает все шаги x, как вы хотите, и выполнить все, что вам нужно?
Я хочу написать LKM (Linux Kernel Module), который захватывает часы реального времени (прерывание 8). Поэтому я хочу, чтобы прерывание было настроено на мою функцию, и в какой-то момент отправьте его обратно на старую функцию.
Я попытался использовать функцию request_irq
без каких-либо успехов, возможно потому, что функция ядра, которая там, не хочет делиться прерыванием (что, по моему мнению, является хорошим решением).
Я также попытался отредактировать IDT (таблицу дескрипторов прерываний), согласно некоторым страницам, которые я нашел. Не из них работали, большинство даже не компилировалось с тех пор, как они написаны для ядра 2.6, и я работаю с 3.10.
Это упрощенный код, который я только что даю вам идею того, что я делаю.
kpage =__get_free_page( GFP_KERNEL);
asm("sidt %0": : "m"(*idtr) : );
memcpy(kpage, idtr, 256*sizeof(kpage));
newidt = (unsigned long long *)(*(unsigned long*)(idtr+1));
newidt[8] = &my_function;
asm("lidt %0": "=m"(newidt):);
Все мои попытки закончились в хорошие времена с ошибкой сегментации и в плохие времена с сбоем ядра, заставляя меня перезагружаться (к счастью, я работаю с виртуальной машиной и моментальными снимками).
Итак, как я могу захватить прерывание в реальном времени, чтобы он делал мои вещи? (И затем отправьте его обратно к исходной функции, чтобы выполнить выполнение.)
Здесь есть хороший код для изменения функции pagefault в IDT. Я не мог заставить его работать, поскольку он также написан для ядра 2.6. Этот вопрос также стоит посмотреть.
Чтобы получить награду, пожалуйста, опубликуйте рабочий код или, по крайней мере, достаточную информацию, чтобы он запустился.
Это может помочь вам: http://cormander.com/2011/12/how-to-hook-into-hijack-linux-kernel-functions-via-lkm/
Почему бы вам просто не зацепить функцию, которая вызывает все шаги x, как вы хотите, и выполнить все, что вам нужно?