Opis funkcji przerwania int 80h: 201-250

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: 201-250
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
201
-
Pobierz efektywne ID użytkownika bieżącego procesu (sys_geteuid32)
nic
EAX = efektywny UID

202
-
Pobierz efektywne ID grupy bieżącego procesu (sys_getegid32)
nic
EAX = efektywny GID

203
-
Ustaw realny i efektywny ID użytkownika (sys_setreuid32)
EBX/RDI = realny ID użytkownika (UID)
ECX/RSI = efektywny UID
EAX = 0
EAX = błąd EPERM

204
-
Ustaw realny i efektywny ID grupy (sys_setregid32)
EBX/RDI = realny ID grupy (GID)
ECX/RSI = efektywny GID
EAX = 0
EAX = błąd EPERM

205
-
Pobierz liczbę dodatkowych grup (sys_getgroups32)
EBX/RDI = rozmiar tablicy z ECX/RSI
ECX/RSI = adres tablicy, gdzie zostaną zapisane GID-y (DWORDY) grup dodatkowych
EAX = liczba dodatkowych grup procesu
EAX = błąd EFAULT, EINVAL, EPERM

206
-
Ustaw liczbę dodatkowych grup (sys_setgroups32)
EBX/RDI = rozmiar tablicy z ECX/RSI
ECX/RSI = adres tablicy, gdzie zawierającą GID-y (DWORDY)
EAX = 0
EAX = błąd EFAULT, EINVAL, EPERM

207
-
Zmiana właściciela (sys_fchown32)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = nowy numer użytkownika
EDX/RDX = nowy numer grupy
EAX = 0
EAX = błąd

208
-
Ustaw różne ID użytkownika (sys_setresuid32)
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

209
-
Pobierz różne ID użytkownika (sys_getresuid32)
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

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

211
-
Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid32)
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

212
-
Zmiana właściciela pliku (sys_chown32)
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

213
-
Ustaw identyfikator użytkownika (sys_setuid32)
EBX/RDI = nowy UID
EAX = 0
EAX = błąd EPERM

214
-
Ustaw ID grupy bieżącego procesu (sys_setgid32)
EBX/RDI = nowy ID grupy
EAX = 0
EAX = błąd EPERM

215
-
Ustal UID przy sprawdzaniu systemów plików (sys_setfsuid32)
EBX/RDI = nowy ID użytkownika
EAX = stary UID (zawsze)

216
-
Ustal GID przy sprawdzaniu systemów plików (sys_setfsgid32)
EBX/RDI = nowy ID grupy
EAX = stary GID (zawsze)

217
155
Zmień główny system plików/katalog (sys_pivot_root)
EBX/RDI = adres łańcucha znaków - nowy główny katalog bieżącego procesu
ECX/RSI = adres łańcucha znaków - otrzyma stary główny katalog bieżącego procesu
EAX = 0
EAX = błąd EBUSY, EINVAL, EPERM, ENOTDIR + błędy sys_stat

218
27
Pobierz informację, czy strony pamięci są w rdzeniu procesu (sys_mincore)
EBX/RDI = adres początkowy sprawdzanych bajtów
ECX/RSI = liczba sprawdzanych bajtów
EDX/RDX = adres tablicy bajtów zdolnej pomieścić tyle bajtów, ile stron pamięci jest sprawdzanych. Najmłodszy bit w każdym bajcie będzie mówił o tym, czy dana strona pamięci jest obecna (=1), czy zrzucona na dysk (=0)
EAX = 0
EAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM

219
28
Porada dla jądra o użyciu pamięci (sys_madvise, sys_madvise1)
EBX/RDI = adres początkowy bajtów, których dotoczy porada
ECX/RSI = liczba tych bajtów
EDX/RDX = porada
EAX = 0
EAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM

220
217
Pobierz wpisy o katalogach, wersja 64-bitowa (sys_getdents64)
EBX/RDI = deskryptor otwartego katalogu
ECX/RSI = adres obszaru pamięci na struktury dirent
EDX/RDX = rozmiar obszaru pamięci pod [ECX/RSI]
EAX = 0
EAX = błąd EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR

221
-
Kontrola nad deskryptorem pliku, wersja 64-bitowa (sys_fcntl64)
EBX/RDI = deskryptor pliku
ECX/RSI = kod komendy
EDX/RDX zależy od komendy
EAX zależy od komendy
EAX = błąd EACCES, EAGAIN, EBADF, EDEADLK, EFAULT, EINTR, EINVAL, EMFILE, ENOLOCK, EPERM

222
-
brak danych
-
-

223
185
Funkcja systemowa sys_security
niezaimplementowane w jądrach 2.4
zawsze EAX = ENOSYS

224
186
Pobierz identyfikator wątku (sys_gettid)
nic
EAX = id wątku

225
187
Czytaj kilka stron pliku z wyprzedzeniem do pamięci podręcznej (sys_readahead)
EBX/RDI = deskryptor pliku
ECX/RSI = miejsce w pliku, od którego zacząć
EDX/RDX = liczba bajtów do przeczytania
EAX = EBADF, gdy błąd

226
188
Ustaw wartość atrybutu rozszerzonego (sys_setxattr)
EBX/RDI = adres ścieżki pliku
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EDI/R8 = flaga (1=utwórz, 2=zamień)
EAX = 0
EAX = błąd

227
189
Ustaw wartość atrybutu rozszerzonego (sys_lsetxattr)
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EDI/R8 = flaga (1=utwórz, 2=zamień)
EAX = 0
EAX = błąd

228
190
Ustaw wartość atrybutu rozszerzonego (sys_fsetxattr)
EBX/RDI = deskryptor pliku
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EDI/R8 = flaga (1=utwórz, 2=zamień)
EAX = 0
EAX = błąd

229
191
Pobierz wartość atrybutu rozszerzonego (sys_getxattr)
EBX/RDI = adres ścieżki pliku
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EAX = 0
EAX = błąd

230
192
Pobierz wartość atrybutu rozszerzonego (sys_lgetxattr)
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EAX = 0
EAX = błąd

231
193
Pobierz wartość atrybutu rozszerzonego (sys_fgetxattr)
EBX/RDI = deskryptor pliku
ECX/RSI = adres nazwy atrybutu
EDX/RDX = wartość atrybutu
ESI/R10 = długość atrybutu
EAX = 0
EAX = błąd

232
194
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_listxattr)
EBX/RDI = adres ścieżki pliku
ECX/RSI = adres tablicy na nazwy
EDX/RDX = długość tablicy
EAX = 0
EAX = błąd

233
195
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_llistxattr)
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi
ECX/RSI = adres tablicy na nazwy
EDX/RDX = długość tablicy
EAX = 0
EAX = błąd

234
196
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_flistxattr)
EBX/RDI = deskryptor pliku
ECX/RSI = adres tablicy na nazwy
EDX/RDX = długość tablicy
EAX = 0
EAX = błąd

235
197
Usuń atrybut rozszerzony pliku (sys_removexattr)
EBX/RDI = adres ścieżki pliku
ECX/RSI = adres nazwy atrybutu do usunięcia
EAX = 0
EAX = błąd

236
198
Usuń atrybut rozszerzony pliku (sys_lremovexattr)
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi
ECX/RSI = adres nazwy atrybutu do usunięcia
EAX = 0
EAX = błąd

237
199
Usuń atrybut rozszerzony pliku (sys_fremovexattr)
EBX/RDI = deskryptor pliku
ECX/RSI = adres nazwy atrybutu do usunięcia
EAX = 0
EAX = błąd

238
200
Zabij pojedyncze zadanie (sys_tkill)
EBX/RDI = PID zadania (niekoniecznie całego procesu)
ECX/RSI = numer sygnału do wysłania
EAX = 0
EAX = błąd EINVAL, ESRCH, EPERM

239
40
Kopiuj dane między deskryptorami plików (sys_sendfile64)
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

240
202
Szybka funkcja blokowania (sys_futex)
EBX/RDI = sprawdzany adres
ECX/RSI = operacja
EDX/RDX = wartość
ESI/R10 = adres struktury timespec (czas oczekiwania) lub 0
EAX zależy od operacji
EAX = błąd EINVAL, EFAULT

241
203
Ustaw maskę procesorów dla procesu (sys_sched_setaffinity)
EBX/RDI = PID procesu, którego maskę ustawiamy (0=bieżący)
ECX/RSI = długość maski pod [EDX/RDX]
EDX/RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym itp...
EAX = 0
EAX = błąd EINVAL, EFAULT, ESRCH, EPERM

242
204
Pobierz maskę procesorów dla procesu (sys_sched_getaffinity)
EBX/RDI = PID procesu, którego maskę pobieramy (0=bieżący)
ECX/RSI = długość maski pod [EDX/RDX]
EDX/RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym itp...
EAX = 0
EAX = błąd EINVAL, EFAULT, ESRCH, EPERM

243
205
Ustaw wpis w obszarze lokalnym wątku TLS (sys_set_thread_area)
EBX/RDI = adres struktury user_desc
EAX = 0
EAX = EINVAL, EFAULT, ESRCH

244
211
Pobierz wpis w obszarze lokalnym wątku TLS (sys_get_thread_area)
EBX/RDI = adres struktury user_desc
EAX = 0
EAX = błąd EINVAL, EFAULT

245
206
Utwórz asynchroniczny kontekst we/wy (sys_io_setup)
EBX/RDI = liczba zdarzeń, które kontekst może otrzymać
ECX/RSI = adres DWORDa (o wartości zero), który otrzyma uchwyt do nowego kontekstu
EAX = 0
EAX = błąd EINVAL, EFAULT, ENOSYS, ENOMEM, EAGAIN

246
207
Zniszcz asynchroniczny kontekst we/wy (sys_io_destroy)
EBX/RDI = uchwyt do usuwanego kontekstu
EAX = 0
EAX = błąd EINVAL, EFAULT, ENOSYS

247
208
Pobierz zdarzenia we/wy (sys_io_getevents)
EBX/RDI = uchwyt do kontekstu
ECX/RSI = minimalna liczba zdarzeń do pobrania
EDX/RDX = maksymalna liczba zdarzeń do pobrania
ESI/R10 = adres tablicy struktur io_event
EDI/R8 = adres struktury timespec (czas oczekiwania) lub 0
EAX = liczba odczytanych zdarzeń
EAX = błąd EINVAL, EFAULT, ENOSYS

248
209
Wyślij zdarzenia we/wy do przetworzenia (sys_io_submit)
EBX/RDI = uchwyt do kontekstu
ECX/RSI = liczba adresów struktur pod [EDX/RDX]
EDX/RDX = adres tablicy adresów struktur iocb opisujących zdarzenia do przetworzenia
EAX = liczba wysłanych bloków we/wy
EAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN

249
210
Przerwij operację we/wy (sys_io_cancel)
EBX/RDI = uchwyt do kontekstu
ECX/RSI = adres struktury iocb, opisującej operację do przerwania
EDX/RDX = adres struktury io_event, która otrzyma przerwane działanie
EAX = 0
EAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN

250
-
Funkcja systemowa sys_alloc_hugepages
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał
zawsze EAX = ENOSYS



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)