Вызов к функциям ядра Linux осуществляется
через прерывание 80h , а параметры передаются через регистры.
Для вызова функций ядра Linux надо :
- поместить в регистр еах номер системного вызова
- поместить в регистры ebx,ecx,edx,esi,edi параметры системного вызова, в ebx - первый, в ecx - второй
и в edx - третий и т.д.
если параметров 6 и больше, то в еах также номер системного вызова, а параметры в памяти подряд,
адрес первого параметра в регистр ebx
- вызвать прерывание 80h
SYS_Exit.
Номер вызова = 1
Параметры: - параметр всего один - это число, определяющее код возвращаемого значения, мной не использовался, обычно пишу ноль,
и все нормально работает.
Действие: - завершает текущий процесс.
SYS_Fork.
номер вызова = 2
Параметры: - нет параметров.
Действие: - создает дочерний процесс, при этом в родительский процесс возвращается ид дочернего процесса ( в аккумулятор),
а в дочерний процесс 0 ( тоже в аккумулятор), поэтому в ассемблере для разделения процессов используется проверка аккумулятора на 0,
если произошла ошибка, то возвращается -1 и дочерний процесс не создается
SYS_Read.
Номер вызова = 3
Параметры: - параметров 3, первый - дескриптор файла из которого будем читать данные,
второй - место (адрес или переменная), куда будем читать данные, и третий - количество данных в байтах, которые нам надо прочитать.
Для чтения с клавиатуры надо указать дескриптор стандартного потока ввода - STDIN = 0.
Действие: - читает указанное в параметрах количество данных из файла в память.
SYS_Write.
Номер вызова = 4
Параметры: - параметров 3, первый дескриптор файла, в который пишем данные, второй - адрес начала данных в памяти, и третий - количество данных,
которые будем писать в файл. Для вывода на экран дескриптор файла-потока вывода на экран(STDOUT) = 1.
Действие: - записывает указанное количество данных из памяти в указанный файл.
SYS_Waitpid.
Номер вызова = 7
Параметры: - параметров 3, первый - ид процесса, завершения которого мы будем ждать, второй - место (адрес или переменная),
куда передать код завершения процесса, третий - опции, но с ними я еще не разобрался, поэтому пока зануляю второй и третий параметры.
Действие: - Ожидаем завершения указанного процесса.
SYS_Unlink.
Номер вызова = 10
Параметры: - параметр один - полное имя файла, который мы хотим удалить.
Действие: - удаляет указанный файл.
SYS_Open.
Номер вызова = 5
Параметры: - параметров 3 , первый - имя файла, второй - режим открытия файла ( я пока разобрался с 3-мя - 0 = чтение, 1 = запись,
2 = чтение и запись , но есть еще для создания файла , если он не существует, и еще много разных...), третий параметр используется
только в том случае, если при открытии файл должен и создасться, тогда третий параметр - режим доступа к файлу ( например 511 = восьмеричное 777, то есть полный доступ всем)
Действие: - открывает и может создавать файл если его нет, возвращает дескриптор открытого файла
SYS_Creat.
Номер вызова = 8
Параметры: - параметров 2 , первый - имя создаваемого файла, второй - режим доступа к файлу.
Действие: - создает файл.
SYS_Close.
Номер вызова = 6
Параметры: - параметр 1 - дескриптор файла, который закрываем.
Действие: - закрывает файл.
SYS_Iseek.
Номер вызова = 19
Параметры: - параметров 3, первый - дескриптор файла, второй - смещение , может быть и отрицательным, третий - позиция от которой отсчитываем смещение - 0 = начало файла.
Действие: - устанавливает текущую позицию в файле на указанную нами.
SYS_Link.
Номер вызова = 9
Параметры: - параметров 2, первый - имя файла, который мы будем переименовывать, второй - новое имя файла.
Действие: - переименовывает файл.
SYS_Execve.
Номер вызова = 11
Параметры: - параметров 3, первый - полное имя файла-программы, которой мы будем подменять процесс, второй - массив аргументов для программы,
нулевой элемент всегда имя программы, закнчивается всегда нулём, если аргументов нет, то 0, третий - массив окружения программы, заканчивается всегда нулем, если нет, то = 0.
Действие: - подменяет текущий процесс программой.
Буду сюда добавлять описания других системных вызовов, как только разберусь с ними...
С уважением Pauk_pv ©
|