параметры системных вызовов
Модератор: Модераторы разделов
-
- Сообщения: 206
- Статус: с диагнозом
- ОС: операционная клинической
параметры системных вызовов
Где можно глянуть подробное описание параметров системных функций ядра?
-
- Сообщения: 614
Re: параметры системных вызовов
man 2 <системный_вызов>
например
man 2 open
например
man 2 open
-
- Сообщения: 206
- Статус: с диагнозом
- ОС: операционная клинической
Re: параметры системных вызовов
В моей мандриве man 2 не работает, а просто man содержит лишь поверхностное описание вызовов, или, напрамер для read, вообще ничего не написано. Я же хочу вызывать их через вектор 0x80, поэтому надо знать, в какой регистр какие параметры заносить.
-
- Сообщения: 92
-
- Сообщения: 1338
- Статус: We are all Kosh
- ОС: Fedora 10
Re: параметры системных вызовов
Фигасе вопрос начинающего, скорее всего тебе нужно смотреть исходники ядра, чтобы определить номер системного вызова и его аргументы. Интерфейс к сис.вызовам следующий: номер пишится в регистр EAX, параметры вызова кладутся в регистры: EBX, ECX, EDX, ..., результат вызова будет лежать в EAX.
UPD:
Michael это в том случае если эта инструкция существует на данном процессоре
UPD:
Michael это в том случае если эта инструкция существует на данном процессоре
LightLang Team
-
- Сообщения: 153
Re: параметры системных вызовов
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 по ассемблеру в юниксах.