Мне присвоено задание «Написать системный вызов в качестве модуля ядра». Теперь, насколько я понял из моего чтения в Интернете, невозможно реализовать системный вызов как модуль ядра, однако есть способы перехватить существующие системные вызовы. Правильно ли это? В этом блоге я нашел один такой пример: http://syprog.blogspot.in/2011/10/hijack-linux-system-calls-part-i.htmlНапишите системный вызов в качестве модуля ядра
ответ
В linux sys_call_table содержит указатели на функции для всех системных вызовов. Эта таблица была первоначально экспортирована обратно в дни 2.4, затем она была сделана статической, затем снова была экспортирована в некоторые из последних ядер. Давайте возьмем пример из двух случаев.
Дело 1. sys_call_table экспортировано.
Используйте следующую строку в своем модуле ядра.
sys_call_table [AVAILABLE_INDEX] = new_sys_call;
Новый системный вызов может быть реализован как.
asmlinkage new_sys_call (...) {}
Case - 2) sys_call_table не экспортируются.
Попробуйте получить sys_call_table выступление в System.map оглавлению
$ кошка System.map | Grep sys_call_table
Жесткий код значение в модуле.
Если это не доступно, нам необходимо определить адрес таблицы динамически. sys_call_table, скорее всего, будет в начале раздела текста ядра.
Вот шаги для вычисления базового адреса sys_call_table
Найти две системные вызовы, которые размещены рядом друг с другом в таблице (из исходного кода). Например: sys_read, sys_open.
Получить адрес этих вызовов sys.
Поиск этих двух адресов с начала текстового раздела.
(Compute начало текста раздела по, objdump -h vmlinux | Grep ".text")
Когда вы нашли его, вычислить базу sys_call_table, основанную на их относительного смещения.
- 1. Как добавить системный вызов из модуля ядра?
- 2. Как использовать системный вызов Linux из модуля ядра Linux
- 3. Как установить системный вызов в модуле ядра
- 4. Пользовательские функции ядра Linux системный вызов обертка
- 5. Системный вызов ядра для создания нового файла
- 6. ядра Linux разрешения модуля
- 7. Системный вызов Linux Connect
- 8. Системный вызов Linux
- 9. Как разобрать системный вызов
- 10. Можно ли назвать системный вызов в пространстве ядра?
- 11. системный вызов Linux из ядра сбою (странно офсет)
- 12. Использование ядра модуля ядра
- 13. Сброс модуля ядра ядра
- 14. Записывать системный вызов ядра, который печатает человекообразное время
- 15. Системный вызов в процессе
- 16. системный вызов в питона
- 17. Системный вызов ядра Linux возвращает -1 вместо {-1, -256}
- 18. Как реализовать собственный системный вызов без перекомпиляции ядра Linux?
- 19. Переключение системного вызова модуля ядра
- 20. Убивать программу пользовательского пространства из модуля ядра
- 21. Системный вызов без переключения контекста?
- 22. unshare системный вызов не работает
- 23. Как расширить элементы кортежа в качестве аргумента os системный вызов?
- 24. fork() системный вызов в linux
- 25. Go окна системный вызов вызов
- 26. Что означает «атомный» системный вызов?
- 27. Недостатки модуля ядра linux?
- 28. Кросс компиляции модуля ядра: неверный формат модуля
- 29. Тестирование модуля ядра
- 30. Как системный вызов обычно реализуется