параметры системных вызовов

Модератор: Модераторы разделов

zl3p
Сообщения: 206
Статус: с диагнозом
ОС: операционная клинической

параметры системных вызовов

Сообщение zl3p » 17.11.2007 20:12

Где можно глянуть подробное описание параметров системных функций ядра?
Спасибо сказали:

Аватара пользователя
anonymous.ru
Сообщения: 601

Re: параметры системных вызовов

Сообщение anonymous.ru » 17.11.2007 20:14

man 2 <системный_вызов>
например
man 2 open
Ушел на forum.ubuntu.ru
Спасибо сказали:

Аватара пользователя
Liksys
Сообщения: 2910

Re: параметры системных вызовов

Сообщение Liksys » 17.11.2007 20:15

man
Спасибо сказали:

zl3p
Сообщения: 206
Статус: с диагнозом
ОС: операционная клинической

Re: параметры системных вызовов

Сообщение zl3p » 18.11.2007 14:46

В моей мандриве man 2 не работает, а просто man содержит лишь поверхностное описание вызовов, или, напрамер для read, вообще ничего не написано. Я же хочу вызывать их через вектор 0x80, поэтому надо знать, в какой регистр какие параметры заносить.
Спасибо сказали:

Michael
Сообщения: 92

Re: параметры системных вызовов

Сообщение Michael » 18.11.2007 18:45

zl3p писал(а):
18.11.2007 14:46
Я же хочу вызывать их через вектор 0x80, поэтому надо знать, в какой регистр какие параметры заносить.

А почему через вектор 0x80? Вроде системные вызовы давно через спец. инструкцию процессора делаются.
Спасибо сказали:

Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: параметры системных вызовов

Сообщение BlackStar » 18.11.2007 18:55

Фигасе вопрос начинающего, скорее всего тебе нужно смотреть исходники ядра, чтобы определить номер системного вызова и его аргументы. Интерфейс к сис.вызовам следующий: номер пишится в регистр EAX, параметры вызова кладутся в регистры: EBX, ECX, EDX, ..., результат вызова будет лежать в EAX.

UPD:
Michael это в том случае если эта инструкция существует на данном процессоре
LightLang Team
Спасибо сказали:

Serg79
Сообщения: 153

Re: параметры системных вызовов

Сообщение Serg79 » 19.11.2007 13:40

Q: У юникса есть API ?
A: Да. Называется это системные вызовы (syscalls). Осуществляются они путем вызова прерывания номер 0x80. Кроме того, практически везде действует "lcall $7,$0" ("call 7:0" в синтаксисе интел) как его полный аналог. Так же в системе обязательно присутствует библиотека libc.

Q: Как передаются параметры системных вызовов?
A: Во FreeBSD параметры передаются через стек, сначала последний, затем предпоследний и первый параметр помещается в стек последним. Так же при использовании прерывания необходимо поместить в стек любое 32-битное значение. В Linux через регистры по порядку первый в EBX, и тд - ECX, EDX, ESI, EDI, EBP. Если количество параметров больше 6, то в памяти формируется структура с параметрами и в EBP помещается адрес этой стурктуры. В EAX в обоих случаях номер системного вызова. Если хотите использовать функции из libc, то передача параметров при этом осуществляется так как принято в Си (в мире Windows такой способ известен как CDECL). Результат всегда возвращается в EAX.

Q: Где узнать номера системных вызовов?
A: Самый простой способ для FreeBSD(должны быть установлены исходники системы!) - смотреть файл /usr/srs/sys/kern/syscalls.master. Там и номера и параметры. Способ для Linux - /usr/src/linux/arc/i386/kernel/syscall_table.S или файл entry.S из того же каталога для версий 2.4 и 2.6.

Q: Где найти описания системный вызовов или функций libc?
A: Как обычно в юникс - справочник man (например man 2 write) или info.

Оригинал находиться по адресу: FAQ по ассемблеру в юниксах.
Спасибо сказали: