Opis funkcji przerwania int 80h: 251-300

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: 251-300
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
251
-
Funkcja systemowa sys_free_hugepages
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał
zawsze EAX = ENOSYS

252
231
Zakończ wszystkie wątki procesu (sys_exit_group)
EBX/RDI = status (kod wyjścia)
nigdy nie powraca

253*
212
Pobierz ścieżkę wejścia do katalogu (sys_lookup_dcookie)
EBX:ECX/RDI? = wartość opisująca wpis o katalogu
EDX/RSI? = adres bufora, który otrzyma ścieżkę
ESI/RDX? = długość tego bufora
EAX = długość ścieżki
EAX = błąd ENAMETOOLONG, EPERM, EINVAL, ENOMEM, ERANGE, EFAULT

254
213
Utwórz deskryptor pliku epoll (sys_epoll_create)
EBX/RDI = wstępna liczba deskryptorów
EAX = nowy deskryptor pliku
EAX = błąd ENOMEM

255
233
Kontroluj deskryptor pliku epoll (sys_epoll_ctl)
EBX/RDI = deskryptor epoll
ECX/RSI = kod operacji
EDX/RDX = deskryptor pliku
ESI/R10 = adres struktury epoll_event
EAX = 0
EAX = błąd ENOMEM, EBADF, EPERM, EINVAL

256
232
Czekaj na deskryptorze pliku epoll (sys_epoll_wait)
EBX/RDI = deskryptor epoll
ECX/RSI = adres tablicy struktur epoll_event
EDX/RDX = maksymalna liczba zdarzeń, na które będziemy czekać
ESI/R10 = czas czekania w milisekundach (-1 = nieskończoność)
EAX = liczba deskryptorów gotowych
EAX = błąd EFAULT, EINTR, EBADF, EINVAL

257
216
Przemapuj strony pamięci / stwórz nieliniowe mapowanie pliku (sys_remap_file_pages)
EBX/RDI = początkowy adres stron pamięci
ECX/RSI = rozmiar przemapowywanego obszaru pamięci
EDX/RDX = 0 (już nieużywane, musi być 0)
ESI/R10 = offset w pliku mierzony w jednostkach strony systemowej
EDI/R8 = flagi (znaczenie takie, jak w sys_mmap, ale tu tylko MAP_NONBLOCK jest uznawane)
EAX = 0
EAX = błąd EINVAL

258
218
Utwórz wskaźnik do ID wątku (sys_set_tid_address)
EBX/RDI = wskaźnik (adres), na którego wartość ma być ustawiona zmienna clear_child_tid jądra
EAX = PID bieżącego procesu

259
222
Utwórz POSIX-owy licznik czasu (sys_timer_create)
EBX/RDI = ID zegara, który będzie podstawą mierzenia czasu
ECX/RSI = 0 lub adres struktury sigevent
EDX/RDX = adres zmiennej trzymającej adres DWORDa, który otrzyma ID nowego zegara
EAX = 0
EAX = błąd EAGAIN, EINVAL, ENOTSUPP

260
223
Nastaw POSIX-owy licznik czasu (sys_timer_settime)
EBX/RDI = ID zegara
ECX/RSI = flagi (patrz: manual)
EDX/RDX = adres struktury itimerspec
ESI/R10 = adres struktury itimerspec
EAX = 0
EAX = błąd EINVAL

261
224
Pobierz pozostały czas na POSIX-owym liczniku czasu (sys_timer_gettime)
EBX/RDI = ID zegara
ECX/RSI = adres struktury itimerspec, która otrzyma wynik
EAX = 0
EAX = błąd EINVAL

262
225
Pobierz liczbę przekroczeń POSIX-owego licznika czasu (sys_timer_getoverrun)
EBX/RDI = ID zegara
EAX = liczba przekroczeń
EAX = błąd EINVAL

263
226
Usuń POSIX-owy licznik czasu (sys_timer_delete)
EBX/RDI = ID zegara
EAX = 0
EAX = błąd EINVAL

264
227
Ustaw czas na danym zegarze (sys_clock_settime)
EBX/RDI = ID zegara
ECX/RSI = adres struktury timespec
EAX = 0
EAX = błąd EINVAL, EFAULT, EINVAL

265
228
Pobierz czas na danym zegarze (sys_clock_gettime)
EBX/RDI = ID zegara
ECX/RSI = adres struktury timespec
EAX = 0
EAX = błąd EINVAL, EFAULT, EINVAL

266
229
Pobierz precyzję danego zegara (sys_clock_getres)
EBX/RDI = ID zegara
ECX/RSI = adres struktury timespec
EAX = 0
EAX = błąd EINVAL, EFAULT, EINVAL

267
230
Przerwa w oparciu o dany zegar (sys_clock_nanosleep)
EBX/RDI = ID zegara
ECX/RSI = flagi (TIMER_ABSTIME=1) kontrolujące rodzaj czasu oczekiwania (względny lub nie)
EDX/RDX = adres struktury timespec, która zawiera czas czekania
ESI/R10 = adres struktury timespec (lub NULL), która otrzyma pozostały czas
EAX = 0
EAX = błąd EINTR, EFAULT, ENOTSUPP

268*
-
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_statfs64)
EBX/RDI = adres nazwy dowolnego pliku w zamontowanym systemie plików
ECX/RSI adres struktury statfs64
EAX = 0
EAX = błąd

269*
-
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_fstatfs64)
EBX/RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie plików
ECX/RSI = adres struktury statfs64
EAX = 0
EAX = błąd

270
200
Zabij pojedynczy wątek (sys_tgkill)
EBX/RDI = GID grupy wątku (-1 daje to samo co sys_tkill)
ECX/RSI = PID wątku
EDX/RDX = numer sygnału do wysłania
EAX = 0
EAX = błąd EINVAL, ESRCH, EPERM

271
235
Zmień czas dostępu do pliku (sys_utimes)
EBX/RDI = adres nazwy pliku (ASCIIZ)
ECX/RSI = adres tablicy 2 struktur timeval, NULL gdy chcemy bieżący czas. Pierwsza struktura opisuje czas dostępu, druga - czas zmiany
EAX = 0
EAX = błąd EACCES, ENOENT, EPERM, EROFS

272
221
Zadeklaruj wzorce dostępu (sys_fadvise64_64)
EBX/RDI = deskryptor pliku
ECX/RSI = początek obszaru w pliku (offset)
EDX/RDX = długość obszaru pliku
ESI/R10 = wzorzec dostępu
EAX = 0
EAX = błąd EBADF, ESPIPE, EINVAL

273
236
sys_vserver
niezaimplementowane w jądrach 2.4
zawsze EAX = ENOSYS

274
237
Ustaw politykę dla zakresu pamięci (sys_mbind)
EBX/RDI = adres początku obszaru
ECX/RSI = długość obszaru
EDX/RDX = polityka
ESI/R10 = adres DWORDa zawierającego maskę bitową węzłów
EDI/R8 = długość maski w bitach
EBP/R9 = flagi polityki
EAX = 0
EAX = błąd EFAULT, EINVAL, ENOMEM, EIO

275
239
Pobierz politykę pamięci NUMA (sys_get_mempolicy)
EBX/RDI = adres DWORDa, który otrzyma politykę
ECX/RSI = NULL lub adres DWORDa, który otrzyma maskę węzłów
EDX/RDX = maksymalna długość maski w bitach + 1
ESI/R10 = sprawdzany adres, jeśli potrzebny
EDI/R8 = NULL lub MPOL_F_ADDR=2 (wtedy będzie zwrócona polityka dotycząca podanego adresu)
EAX = 0
EAX = błąd

276
238
Ustaw politykę pamięci NUMA (sys_set_mempolicy)
EBX/RDI = polityka
ECX/RSI = adres DWORDa zawierającego maskę bitową węzłów
EDX/RDX = długość maski w bitach
EAX = 0
EAX = błąd

277
240
Otwórz kolejkę wiadomości (sys_mq_open)
EBX/RDI = adres nazwy, która musi zaczynać się ukośnikiem
ECX/RSI = flagi dostępu
(EDX/RDX = tryb)
(ESI/R10 = adres struktury mq_attr lub NULL)
EAX = deskryptor kolejki
EAX = błąd EACCES, EINVAL, EEXIST, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENOMEM, ENOSPC

278
241
Usuń kolejkę wiadomości (sys_mq_unlink)
EBX/RDI = adres nazwy, która musi zaczynać się ukośnikiem
EAX = 0
EAX = błąd EACCES, ENAMETOOLONG, ENOENT

279
242
Wyślij wiadomość do kolejki (sys_mq_timedsend)
EBX/RDI = deskryptor kolejki
ECX/RSI = adres napisu - treści wiadomości
EDX/RDX = długość wiadomości
ESI/R10 = priorytet (<=32768, wiadomości o większym numerze są przed tymi o mniejszym)
EDI/R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia
EAX = 0
EAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT

280
243
Odbierz wiadomość z kolejki (sys_mq_timederceive)
EBX/RDI = deskryptor kolejki
ECX/RSI = adres bufora na treść wiadomości
EDX/RDX = długość bufora
ESI/R10 = NULL lub adres DWORDa, który otrzyma priorytet wiadomości
EDI/R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia
EAX = 0
EAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT, EBADMSG

281
244
Powiadamianie o wiadomościach (sys_mq_notify)
EBX/RDI = deskryptor kolejki
ECX/RSI = NULL (brak powiadomień) lub adres struktury sigevent
EAX = 0
EAX = błąd EBADF, EBUSY, EINVAL, ENOMEM

282
245
sys_mq_getsetattr
NIE UŻYWAĆ
Interfejs do mq_getattr, mq_setattr
brak danych

283
246
Załaduj nowe jądro do późniejszego uruchomienia (sys_kexec_load)
EBX/RDI = fizyczny adres, gdzie załadować jądro
ECX/RSI = liczba segmentów podanych w EDX/RDX
EDX/RDX = adres tablicy struktur kexec_segment
ESI/R10 = zORowane flagi
EAX = 0
EAX = błąd EBUSY, EINVAL, EPERM

284
247
Czekaj na zmianę stanu innego procesu (sys_waitid)
EBX/RDI = typ identyfikatora (0=czekaj na dowolnego potomka, 1=czekaj na proces o danym PID, 2=czekaj na członka grupy o danym GID)
ECX/RSI = identyfikator: PID lub GID (nieważny dla EBX/RDI=0)
EDX/RDX = adres struktury siginfo
ESI/R10 = opcje opisujące, na jakie zmiany czekamy
EAX = 0, wypełniona struktura siginfo
EAX = błąd ECHILD, EINTR, EINVAL

285
-
sys_setaltroot
nieużywane
brak danych

286
248
Dodanie klucza (sys_add_key)
EBX/RDI = adres nazwy klucza do dodania ASCIIZ
ECX/RSI = adres opisu klucza do dodania ASCIIZ
EDX/RDX = adres danych klucza
ESI/R10 = długość danych klucza w EDX/RDX
EDI/R8 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór.
EAX = numer dodanego klucza
EAX = błąd EACCES, EINTR, EKEYEXPIRED, EKEYREVOKED, ENOMEM, ENOKEY, EINVAL

287
249
Pobranie klucza (sys_request_key)
EBX/RDI = adres nazwy klucza do pobrania ASCIIZ
ECX/RSI = adres opisu klucza do pobrania ASCIIZ
EDX/RDX = adres informacji służących do generowania klucza, gdy go nie znaleziono (ASCIIZ)
ESI/R10 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór.
EAX = numer znalezionego klucza
EAX = błąd EACCES, EINTR, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOMEM, ENOKEY

288
250
Zarządzanie kluczami (sys_keyctl)
EBX/RDI = polecenie
ECX/RSI, EDX/RDX, ... - dalsze parametry
EAX = numer znalezionego klucza
EAX = błąd EACCES, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOKEY

289
251
Ustaw priorytet kolejkowania We/wy procesu (sys_ioprio_set)
EBX/RDI = typ
ECX/RSI = informacja zależna od typu
EDX/RDX = nowy priorytet
EAX = 0
EAX = błąd ESRCH, EPERM, EINVAL

290
252
Pobierz priorytet kolejkowania We/wy procesu (sys_ioprio_get)
EBX/RDI = typ
ECX/RSI = informacja zależna od typu
EAX = priorytet
EAX = błąd ESRCH, EPERM, EINVAL

291
253
Inicjalizacja kolejki zdarzeń inotify (sys_inotify_init)
nic
EAX = deskryptor kolejki
EAX = błąd EMFILE, ENOMEM

292
254
Dodaj obiekt obserwowany kolejki zdarzeń inotify (sys_inotify_add_watch)
EBX/RDI = deskryptor kolejki inotify
ECX/RSI = adres nazwy pliku ASCIIZ
EDX/RDX = flagi inotify
EAX = deskryptor obserwacji danego pliku
EAX = błąd EACCES, EBADF, EFAULT, EINVAL, ENOMEM, ENOSPC

293
255
Usuń obserwację obiektu z kolejki zdarzeń inotify (sys_inotify_rm_watch)
EBX/RDI = deskryptor kolejki inotify
ECX/RSI = deskryptor obserwacji
EAX = 0
EAX = błąd EBADF, EINVAL

294
256
Przenieś strony pamięci procesu (sys_migrate_pages)
EBX/RDI = PID procesu, którego strony przenieść
ECX/RSI = największy numer węzła +1
EDX/RDX = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi stare węzły
ESI/R10 = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi nowe węzły
EAX = 0
EAX = błąd EPERM, ESRCH

295
257
Otwórz plik względnie do katalogu (sys_openat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres nazwy pliku ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = bity dostępu
ESI/R10 = prawa dostępu / tryb
EAX = 0
EAX = błąd EBADF, ENOTDIR

296
258
Utwórz katalog względnie do katalogu (sys_mkdirat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = prawa dostępu / tryb
EAX = 0
EAX = błąd - każdy związany z systemem plików lub prawami dostępu

297
259
Utworzenie pliku specjalnego względnie do katalogu (sys_mknodat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = typ urządzenia OR prawa dostępu
ESI/R10, EDI/R8 - wynik działania (zmodyfikowanego) makra makedev
EAX = 0
EAX = błąd EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS

298
260
Zmiana właściciela obiektu położonego względnie do katalogu (sys_fchownat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = identyfikator UID nowego właściciela obiektu
ESI/R10 = identyfikator GID grupy, która stanie się właścicielem obiektu
EDI/R8 = 0 lub wartość AT_SYMLINK_NOFOLLOW=100h, wtedy nie będzie podążał za dowiązaniami symbolicznymi
EAX = 0
EAX = błąd EBADF, ENOTDIR, EINVAL

299
261
Zmiana czasów dostępu i zmian pliku położonego względnie do katalogu (sys_futimesat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = adres tablicy 2 struktur timeval, NULL gdy chcemy bieżący czas. Pierwsza struktura opisuje czas dostępu, druga - czas zmiany
EAX = 0
EAX = błąd EBADF, ENOTDIR

300
262
Pobierz status obiektu położonego względnie do katalogu (sys_fstatat64)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu
EDX/RDX = adres struktury stat na dane
ESI/R10 = 0 lub AT_SYMLINK_NOFOLLOW (=0x100), gdy nie chcemy dereferencjonować dowiązań
EAX = 0
EAX = błąd EBADF, ENOTDIR, EINVAL, błędy sys_stat



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