Есть ли возможность получить доступ к sys_call_table
из моего собственного модуля для Kernel 2.6+
? Я буду признателен, если кто-то может дать ссылки на статьи или инструкции. Мне нужен метод без необходимости изменять исходный код Kernel
. Я знаю, что было легко на Linux 2.4 Kernel
, вы могли бы использовать внешний символ, однако эта способность была удалена с Kernel 2.6
.доступ к sys_call_table в ядре 2.6+
ответ
Как вы действительно пытаетесь сделать это, замените syscall своей собственной функцией, я бы рекомендовал использовать kprobes для этого вида работы, вы можете легко сломать любой адрес ядра (или символ (например, sys_exit, sys_whateversyscall) и изменить путь выполнения, все это во время выполнения, с модулем ядра, если вам нужно :) У него очень низкие накладные расходы.
Kprobes (или jprobes, если вы только добавляете свой код в syscall, а не полностью его заменяете), работая путем динамической замены инструкции (например, первой инструкцией вашей записи в syscall) прерыванием (например, int3 на x86). Внутри обработчика do_int3 уведомитель уведомляет kprobes, который, в свою очередь, передает выполнение вашей зарегистрированной функции, из которой вы можете сделать почти что угодно.
Очень хорошая документация дана в документации/kprobes.txt, так как крошечный пример в образцах/kprobes/kprobes_example.c (в этом примере они разбиваются на do_fork, чтобы регистрировать каждую вилку в системе). Он имеет очень простой API и теперь очень портативен.
Поскольку таблица системных вызовов ядра 2.6. * Больше не экспортируется. Здесь вы можете найти, как реэкспорта:
http://www.sans.org/reading_room/whitepapers/honors/linux-kernel-rootkits-protecting-systems_1500
Посмотрите на странице 144.
Я ответил на несколько другие вопросы, подобные этому:
- Вы можете найти это system call hooking example вопрос/ответ, соответствующий вашим потребностям
- Есть various methods of reading kernel memory, что вы также можете найти полезный
- Имейте в виду, что replacing kernel functions is tricky business, а не для финта сердца.
Углубленное объяснение моего TPE LKM модуля, который делает это, см this explanation на моем блоге
Примечание: Как уже упоминалось в комментариях к вашему вопросу, это не правильный способ сделать вещи , Лучше всего перекомпилировать ядро, хотя я понимаю, что есть ситуации, когда это не вариант.
- 1. sys_call_table в ядре Linux 2.6.18
- 2. Защищено ли sys_call_table в ядре 4.8?
- 3. Учет времени в ядре Linux 2.6
- 4. Блокировка профилирования в ядре 2.6 linux
- 5. Как использовать CryptoAPI в ядре linux 2.6
- 6. Доступ к внешней сфере в Python 2.6
- 7. Программа setuid не работает на ядре 2.6
- 8. jffs2 планирование при атомарной ошибке в ядре 2.6
- 9. Как получить доступ к JobCounters и FileSystemCounters в Hadoop 2.6?
- 10. Доступ к среде IHostingEnvironment в статическом основном ядре ASP.NET
- 11. Доступ к встроенной переменной CUDA в дочернем ядре
- 12. Heisenbug в ядре CUDA, доступ к глобальной памяти
- 13. Как получить доступ к стеку ядра процесса в ядре Linux?
- 14. Доступ к методу класса в ядре браузера php
- 15. Получить доступ к IServiceProvider/container в ядре .net
- 16. Доступ к переменной по указателю в ядре OpenCL
- 17. Установить Hue на стандартном ядре Hadoop 2.6 на Ubuntu
- 18. set_memory_ * функция в ядре Linux> = 2.6.25
- 19. источник пинга в ядре
- 20. Уязвимость в ядре в ядре?
- 21. Linux sys_call_table rip относительная адресация x86_64
- 22. Переход к 2.6.x Python
- 23. В ядре Iinux в чем смысл .data и .long?
- 24. Как подключить Python 2.6 к OSI PI?
- 25. Присоединение к псевдониму, выбираемому в ядре Sqlalchemy
- 26. Как присоединиться к потоку в ядре Linux?
- 27. Как порт драйвер Linux, который скомпилирован в ядре 2.6, без компиляции в другой новой версии ядра
- 28. ptrace не может хорошо работать в ядре 2.6 для mips в qemu?
- 29. матрица row/column-major доступ в ядре, называемая mexfunction
- 30. Как pthreads реализованы в ядре Linux (> 2.6) с использованием NPTL?
Эта способность была удалена, потому что обычно это неправильный способ делать то, что вы пытаетесь сделать, и потому, что это слишком легко для руткитов. Что вы на самом деле пытаетесь сделать, в конце концов? – bdonlan
Попытка заменить системные вызовы своими собственными методами. – RomanKapitonov
Модуль всегда является неправильным способом изменения системных вызовов ... –