Opis funkcji przerwania int 80h: 151-200

Jeśli jakaś funkcja zakończy się błędem, w EAX/RAX zwracana jest wartość ujemna z przedziału od -4096 do -1 włącznie.

Z drugiej strony, opisy funkcji na stronach manuala mówią, że zwracane jest -1, a wartość błędu jest zapisywana do zmiennej errno z biblioteki GLIBC. Dzieje się tak tylko w przypadku, gdy korzystamy z interfejsu języka C (czyli deklarujemy i uruchamiamy zewnętrzne funkcje odpowiadające wywołaniom systemowym i linkujemy nasz program z biblioteką języka C), a nie bezpośrednio z wywołań systemowych (czyli przerwania int 80h).

Najbardziej aktualne informacje o funkcjach systemowych można znaleźć zazwyczaj w sekcji 2 (lub 3) manuala, na przykład man 2 open.

Najnowsze wersje jądra można znaleźć na www.kernel.org, a pliki z listą funkcji i ich numerów są pod ścieżkami:

Najnowsze wersje stron manuala można znaleźć tu: www.kernel.org/pub/linux/docs/man-pages.

Napis ASCIIZ oznacza łańcuch znaków ASCII zakończony znakiem/bajtem Zerowym.

Jeśli potrzeba, przy każdej funkcji jest odnośnik do opisu argumentów i innych dodatkowych informacji: typów danych, wartości błędów, możliwych wartości parametrów itp.

Podstawowe funkcje przerwania 80h: 151-200
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
151
150
Odblokowanie stron pamięci (sys_munlock)
EBX/RDI = adres obszaru pamięci (wyrównany do wielokrotności rozmiaru strony pamięci)
ECX/RSI = długość obszaru pamięci
EAX = 0
EAX = błąd EINVAL, ENOMEM

152
151
Zablokowanie całej pamięci procesu (sys_mlockall)
EBX/RDI = flagi blokowania pamięci
EAX = 0
EAX = błąd EINVAL, ENOMEM, EAGAIN, EPERM

153
152
Odblokowanie całej pamięci procesu (sys_munlockall)
nic
EAX = 0
EAX = błąd.

154
142
Ustaw parametry szeregowania zadań (sys_sched_setparam)
EBX/RDI = PID procesu
ECX/RSI = adres struktury sched_param, zawierającej dane
EAX = 0
EAX = błąd EINVAL, ESRCH, EPERM

155
143
Pobierz parametry szeregowania zadań (sys_sched_getparam)
EBX/RDI = PID procesu
ECX/RSI = adres struktury sched_param, która otrzyma wynik
EAX = 0
EAX = błąd EINVAL, ESRCH, EPERM

156
144
Ustaw parametry/algorytm szeregowania zadań (sys_sched_setsheduler)
EBX/RDI = PID procesu
ECX/RSI = polityka
ECX/RSI = adres struktury sched_param, zawierającej dane
EAX = 0
EAX = błąd EINVAL, ESRCH, EPERM

157
145
Pobierz parametry/algorytm szeregowania zadań (sys_sched_getsheduler)
EBX/RDI = PID procesu
EAX = polityka
EAX = błąd EINVAL, ESRCH, EPERM

158
24
Oddanie procesora innym procesom (sys_sched_yield)
nic
EAX = 0
EAX = błąd.

159
146
Pobierz maksymalny priorytet statyczny (sys_sched_get_priority_max)
EBX/RDI = polityka
EAX = maksymalny priorytet dla tej polityki
EAX = błąd EINVAL

160
147
Pobierz minimalny priorytet statyczny (sys_sched_get_priority_min)
EBX/RDI = polityka
EAX = minimalny priorytet dla tej polityki
EAX = błąd EINVAL

161
148
Pobierz długość czasu w szeregowaniu cyklicznym (sys_sched_rr_get_interval)
EBX/RDI = PID procesu (0 = ten proces)
ECX/RSI = adres struktury timeval, która otrzyma wynik
EAX = 0
EAX = błąd ESRCH, ENOSYS

162
35
Pauza w wykonywaniu programu (sys_nanosleep)
EBX/RDI = adres struktury timespec
ECX/RSI = NULL lub adres modyfikowalnej struktury timespec, która otrzyma resztkę czasu, która została
EAX = 0
EAX = sygnał lub błąd EINTR, EINVAL

163
25
Przemapuj adres wirtualny (sys_mremap)
EBX/RDI = stary adres
ECX/RSI = rozmiar obszaru do przemapowania
EDX/RDX = żądany rozmiar
ESI/R10 = zero lub flagi przemapowania
EDI/R8 = nowy adres, jeśli dano flagę MREMAP_FIXED
EAX = wskaźnik do nowego obszaru
EAX = sygnał lub błąd EFAULT, EAGAIN, ENOMEM, EINVAL

164
117
Ustaw różne ID użytkownika (sys_setresuid)
EBX/RDI = realny UID lub -1 (wtedy jest bez zmian)
ECX/RSI = efektywny UID lub -1 (bez zmian)
EDX/RDX = zachowany (saved) UID lub -1 (bez zmian)
EAX = 0
EAX = błąd EPERM

165
118
Pobierz różne ID użytkownika (sys_getresuid)
EBX/RDI = adres DWORDa, który otrzyma realny UID
ECX/RSI = adres DWORDa, który otrzyma efektywny UID
EDX/RDX = adres DWORDa, który otrzyma zachowany UID
EAX = 0
EAX = błąd EFAULT

166
-
Uruchom tryb wirtualny 8086 (sys_vm86)
EBX/RDI = kod funkcji
ECX/RSI = adres struktury vm86plus_struct
(zależy od numeru funkcji)
EAX = błąd EFAULT

167
178
Zapytaj o moduł (sys_query_module)
EBX/RDI = adres nazwy modułu lub NULL (jądro)
ECX/RSI = numer podfunkcji
EDX/RDX = adres bufora
ESI/R10 = rozmiar bufora
EDI/R8 = adres DWORDa
EAX = 0
EAX = błąd EFAULT, ENOSPC, EINVAL, ENOENT

168
7
Czekaj na zdarzenia na deskryptorze (sys_poll)
EBX/RDI = adres tablicy struktur pollfd
ECX/RSI = liczba struktur pollfd w tablicy
EDX/RDX = max. czas na oczekiwanie w milisekundach (-1 = nieskończoność)
EAX = liczba odpowiednich deskryptorów
EAX = 0, gdy czas upłynął
EAX = błąd EFAULT, EINTR, EINVAL

169
180
Interfejs demona NFS (sys_nfsservctl)
EBX/RDI = komenda
ECX/RSI = adres struktury nfsctl_arg
EDX/RDX = adres unii union nfsctl_res
EAX = 0
EAX = błąd

170
119
Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid)
EBX/RDI = realny GID
ECX/RSI = efektywny GID
EDX/RDX = zachowany (saved) GID
EAX = 0
EAX = błąd EPERM

171
120
Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid)
EBX/RDI = adres DWORDa, który otrzyma realny GID
ECX/RSI = adres DWORDa, który otrzyma efektywny GID
EDX/RDX = adres DWORDa, który otrzyma zachowany (saved) GID
EAX = 0
EAX = błąd EFAULT

172
157
Działania na procesie (sys_prctl)
EBX/RDI = opcja
ECX/RSI, EDX/RDX, ESI/R10, EDI/R8 = argumenty
EAX = 0 lub 1
EAX = błąd EINVAL

173
15
Powrót z procedury obsługi sygnału (sys_rt_sigreturn)
-- funkcja wewnętrzna, nie używać--
EBX/RDI = parametr zależny od architektury
nigdy nie powraca

174
13
Pobierz i zmień procedurę obsługi sygnału (sys_rt_sigaction)
EBX/RDI = numer sygnału
ECX/RSI = adres struktury sigaction opisującą bieżącą procedurę
EDX/RDX = adres struktury sigaction opisującą starą procedurę
ESI/R10 = rozmiar struktury sigset_t
EAX = 0
EAX=błąd EINVAL, EINTR, EFAULT

175
14
Pobierz i zmień blokowane sygnały (sys_rt_sigprocmask)
EBX/RDI = działanie
ECX/RSI = adres zestawu sygnałów (tablicy 32 DWORDów)
EDX/RDX = adres zestawu sygnałów, który otrzyma starą maskę sygnałów
ESI/R10 = rozmiar struktury sigset_t
EAX = 0
EAX=błąd EINVAL

176
127
Pobierz sygnały oczekujące (sys_rt_sigpending)
EBX/RDI = adres zestawu sygnałów, który otrzyma oczekujące sygnały
ECX/RSI = rozmiar struktury sigset_t
EAX = 0
EAX=błąd EFAULT

177
128
Synchronicznie czekaj na zakolejkowane sygnały (sys_rt_sigtimedwait)
EBX/RDI = adres zestawu sygnałów, na które czekać
ECX/RSI = adres struktury siginfo, która otrzyma informację o sygnale
EDX/RDX = adres struktury timespec określającej czas oczekiwania
ESI/R10 = rozmiar struktury sigset_t
EAX = numer sygnału
EAX=błąd EINVAL, EINTR, EAGAIN

178
129
Zakolejkuj sygnał dla procesu (sys_rt_sigqueueinfo)
EBX/RDI=PID procesu, który ma otrzymać sygnał
ECX/RSI=numer sygnału
EDX/RDX=adres struktury siginfo_t do wysłania procesowi razem z sygnałem
EAX = 0
EAX=błąd EAGAIN, EINVAL, EPERM, ESRCH

179
130
Czekaj na sygnał (sys_rt_sigsuspend)
EBX/RDI = adres zestawu sygnałów, na które czekać
ECX/RSI = rozmiar struktury sigset_t
EAX = -1
EAX=błąd EINTR, EFAULT

180
17
Czytaj z danej pozycji w pliku (sys_pread/sys_pread64)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = adres bufora, który otrzyma dane
EDX/RDX = liczba bajtów do odczytania
ESI/R10 = pozycja, z której zacząć czytanie
EAX = liczba przeczytanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian)
EAX = błąd (jak w sys_read)

181
18
Zapisuj na danej pozycji w pliku (sys_pwrite/sys_pwrite64)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = adres bufora, z którego pobierać dane do zapisania
EDX/RDX = liczba bajtów do zapisania
ESI/R10 = pozycja, od której zacząć zapisywanie
EAX = liczba zapisanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian)
EAX = błąd (jak w sys_read)

182
92
Zmiana właściciela pliku (sys_chown)
EBX/RDI=adres ścieżki do pliku
ECX/RSI = UID nowego właściciela
EDX/RDX = GID nowej grupy
EAX = 0
EAX = błąd na przykład EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP

183
79
Pobierz bieżący katalog roboczy (sys_getcwd)
EBX/RDI = adres bufora, który otrzyma ścieżkę
ECX/RSI = długość tego bufora
EAX = EBX/RDI
EAX=NULL, gdy błąd ERANGE, EACCES, EFAULT, EINVAL, ENOENT

184
125
Pobierz możliwości procesu (sys_capget)
EBX/RDI = adres struktury cap_user_header_t
ECX/RSI = adres struktury cap_user_data_t
EAX = EBX/RDI
EAX=NULL, gdy błąd EPERM, EINVAL

185
126
Ustaw możliwości procesu (sys_capset)
EBX/RDI = adres struktury cap_user_header_t
ECX/RSI = adres struktury cap_user_data_t
EAX = EBX/RDI
EAX=NULL, gdy błąd EPERM, EINVAL

186
131
Ustaw alternatywny stos dla procedur obsługi sygnałów (sys_sigaltstack)
EBX/RDI = adres struktury stack_t, opisującej nowy stos
ECX/RSI = adres struktury stack_t, opisującej stary stos; lub NULL
(ewentualnie EDX/RDX = adres nowego wierzchołka stosu)
EAX = 0
EAX = błąd EPERM, EINVAL, ENOMEM

187
40
Kopiuj dane między deskryptorami plików (sys_sendfile)
EBX/RDI = deskryptor pliku wyjściowego, otwartego do zapisu
ECX/RSI = deskryptor pliku wejściowego
EDX/RDX = adres 64-bitowej zmiennej - numeru bajtu w pliku źródłowym, od którego zacząć kopiować
ESI/R10 = liczba bajtów do skopiowania
EAX = liczba zapisanych bajtów
EAX = błąd EBADF, EAGAIN, EINVAL, ENOMEM, EIO, EFAULT

188
181
Funkcja systemowa sys_getpmsg
niezaimplementowane w jądrach 2.4,
na systemach 64-bitowych zarezerwowane dla LiS/STREAMS
zawsze EAX = ENOSYS

189
182
Funkcja systemowa sys_putpmsg
niezaimplementowane w jądrach 2.4,
na systemach 64-bitowych zarezerwowane dla LiS/STREAMS
zawsze EAX = ENOSYS

190
58
Utwórz proces potomny i zablokuj rodzica (sys_vfork)
nic
EAX = PID procesu potomnego
EAX = błąd EAGAIN, ENOMEM

191
-
Pobierz limity zasobów (sys_ugetrlimit)
patrz: sys_getrlimit (?)
EAX = 0
EAX = błąd EFAULT, EINVAL, EPERM

192
-
Mapuj urządzenie lub plik do pamięci (sys_mmap2)
EBX/RDI = proponowany adres początkowy
ECX/RSI = liczba bajtów pliku do zmapowania
EDX/RDX = ochrona
ESI/R10 = flagi mapowania
EDI/R8 = deskryptor mapowanego pliku, jeśli mapowanie nie jest anonimowe
EBP/R9 = offset początku mapowanych danych w pliku, liczony w jednostkach wielkości strony systemowej zamiast w bajtach
EAX = adres zmapowanego obszaru
EAX = błąd (takie same jak w sys_mmap + EFAULT)

193
-
Skróć plik, wersja 64-bitowa (sys_truncate64)
EBX/RDI = adres nazwy pliku ASCIIZ
ECX/RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD)
EDX/RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD)
EAX = 0
EAX = błąd

194
-
Skróć plik, wersja 64-bitowa (sys_ftruncate64)
EBX/RDI = deskryptor pliku otwartego do zapisu
ECX/RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD)
EDX/RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD)
EAX = 0
EAX = błąd

195
-
Pobierz status pliku, wersja 64-bitowa (sys_stat64)
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest status obiektu docelowego.
ECX/RSI = adres struktury stat64
EAX = 0
EAX = błąd

196
-
Pobierz status pliku, wersja 64-bitowa (sys_lstat64)
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest status linku, a nie obiektu docelowego.
ECX/RSI = adres struktury stat64
EAX = 0
EAX = błąd

197
-
Pobierz status pliku, wersja 64-bitowa (sys_fstat64)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = adres struktury stat64
EAX = 0
EAX = błąd

198
-
Zmiana właściciela (sys_lchown32)
EBX/RDI = adres nazwy pliku/katalogu ASCIIZ
ECX/RSI = nowy numer użytkownika
EDX/RDX = nowy numer grupy
EAX = 0
EAX = błąd EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EACCES, ELOOP i inne

199
-
Pobierz identyfikator użytkownika (sys_getuid32)
nic
EAX = numer UID

200
-
Pobierz ID grupy bieżącego procesu (sys_getgid32)
nic
EAX = ID grupy



Poprzednia część (Alt+3)
Kolejna część (Alt+4)
Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)