- все системные вызовы Linux ... это те, которые в разделе 2:
Код: Выделить всё
$ man man
...
В таблице ниже показаны номера справочных разделов и описание их содержимого.
1 Исполняемые программы или команды оболочки (shell)
2 Системные вызовы (функции, предоставляемые ядром)
3 Библиотечные вызовы (функции, предоставляемые программными библиотеками)
4 Специальные файлы (обычно находящиеся в каталоге /dev)
5 Форматы файлов и соглашения, например о /etc/passwd
6 Игры
7 Разное (включает пакеты макросов и соглашения), например man(7), groff(7)
8 Команды администрирования системы (обычно, запускаемые только суперпользователем)
9 Процедуры ядра [нестандартный раздел]
- перед выполнением все системные вызовы Linux проходят некоторую предобработку - 1-м параметром в вызов вставляется номер (индекс, селектор) вызова ... после чего выполняется команда int 80h (в старых версиях) или sysenter (в новых) - что по существу одно и то же;
- общее число, конкретные номера системных вызовов и их состав - различаются для разных аппаратных платформ, поддерживаемых Linux ... даже для i686 и X86_64 - это будут различные таблицы;
- все системные вызовы попадают в единое место - в таблицу-селектор системных вызовов sys_call_table, которая является таблицей (линейным массивом) косвенных адресов всех системных вызовов Linux - если нам нужен вызов с индексом (номером) 100, то нам нужно просто call sys_call_table[ 100 ];
- но имя (таблица) call sys_call_table в версиях ядра с 2.6, из каких-то очень специфических "соображений защищённости" команды Линуса Торвальдса - исключена из числа экспортируемых символов ядра;
(я очень сильно подозреваю, что соображения защищённости в данном смысле толковалось так: защищённость куска хлеба команды Торвальдса от сторонних разработчиков модулей ядра )
Но ... "не мытьём, так катаньем" и "голь на выдумки хитра" - техника модификация системных вызовов а). вполне реализуема + б). на порядок раздвигает спектр возможностей разработчиков модулей ядра.
Описанию деталей этой техники я постепенно наполню эту тему...
Краткая история:
1. эта техника описана в моём конспекте лекций Драйверы и модули ядра Linux...
- но описана она там начиная со страницы 344 ...а программисты практики, похоже, дальше страницы 150 не читают
- а потом задают вопросы...
- кроме того, там, в объёмном тексте, она описана разбросано, между несколькими сопутствующими темами...
2. разбираясь не так давно с проектом для одного из заказчиков (Implementing a Distributed Firewall), мне пришлось сильно расширить и детализировать ... познания относительно сетевых (сокетных, 17 штук) системных вызовов - это никак не отражено (пока?) в рукописи книги.
Вот это всё и сподвигло начать писать эту тему.