Opis funkcji przerwania int 80h: 351-379

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: 351-379
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
351
314
Ustaw politykę i atrybuty schedulera (sys_sched_setattr)
EBX/RDI = PID procesu/wątku lub 0 dla bieżącego
ECX/RSI = adres struktury sched_attr z parametrami do ustawienia
EDX/RDX = flagi (0)
EAX = 0
EAX = błąd EINVAL, ESRCH, E2BIG, EBUSY, EPERM

352
315
Pobierz politykę i atrybuty schedulera (sys_sched_getattr)
EBX/RDI = PID procesu/wątku lub 0 dla bieżącego
ECX/RSI = adres struktury sched_attr, która otrzyma aktualne parametry
EDX/RDX = rozmiar struktury podanej w ECX/RSI
ESI/R10 = flagi (0)
EAX = 0
EAX = błąd EINVAL, ESRCH, E2BIG

353
316
Przenieś plik/Zmień nazwę pliku względnie do katalogu (sys_renameat2)
EBX/RDI = deskryptor otwartego katalogu źródłowego lub wartość AT_FDCWD=-100 oznaczająca katalog bieżący
ECX/RSI = adres starej nazwy (i ewentualnie ścieżki) ASCIIZ
EDX/RDX = deskryptor otwartego katalogu docelowego
ESI/R10 = adres nowej nazwy (i ewentualnie ścieżki) ASCIIZ
EDI/R8 = 0 lub flagi funkcji renameat2
EAX = 0
EAX = błąd EACCES, EBUSY, EDQUOT, EFAULT, EINVAL, EISDIR, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, ENOTEMPTY, EEXIST, EPERM, EROFS, EXDEV, EBADF, ENOTDIR

354
317
Operuj na stanie Secure Computing procesu (sys_seccomp)
EBX/RDI = operacja (SECCOMP_SET_MODE_STRICT lub SECCOMP_SET_MODE_FILTER)
ECX/RSI = 0 lub flagi dla operacji (SECCOMP_FILTER_FLAG_TSYNC dla SECCOMP_SET_MODE_FILTER)
EDX/RDX = 0 dla SECCOMP_SET_MODE_STRICT lub adres listy struktur sock_fprog dla SECCOMP_SET_MODE_FILTER
EAX = 0
EAX = błąd EACCES, EFAULT, EINVAL, ENOMEM, ESRCH

355
318
Pobierz serię losowych bajtów (sys_getrandom)
EBX/RDI = bufor do umieszczenia danych
ECX/RSI = długość bufora w EBX/RDI
EDX/RDX = 0 lub flagi funkcji getrandom
EAX = liczba zwróconych bajtów
EAX = błąd EINVAL, EFAULT, EAGAIN, EINTR

356
319
Utwórz anonimowy plik (sys_memfd_create)
EBX/RDI = nazwa pliku
ECX/RSI = 0 lub flagi funkcji memfd_create
EAX = deskryptor utworzonego pliku
EAX = błąd EFAULT, EINVAL, EMFILE, ENFILE, ENOMEM

357
321
Wykonaj operację na mapie lub programie BPF (sys_bpf)
EBX/RDI = operacja
ECX/RSI = adres listy struktur bpf_attr
EDX/RDX = rozmiar struktury przekazanej w ECX/RSI
EAX = nowy deskryptor w przypadku BPF_MAP_CREATE i BPF_PROG_LOAD
EAX = 0
EAX = błąd EINVAL, EFAULT, EAGAIN, EINTR

358
322
Uruchomienie innego programu względnie do katalogu (sys_execveat)
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
ECX/RSI = adres nazwy (ze ścieżką) programu ASCIIZ
EDX/RDX = adres zakończonej dwordem 0 listy adresów argumentów uruchamianego programu ASCIIZ
ESI/R10 = adres zakończonej dwordem 0 listy adresów zmiennych środowiska dla uruchamianego programu ASCIIZ
EDI/R8 = 0 lub flagi funkcji execveat
nie wraca do programu wywołującego
EAX = błąd E2BIG, EACCES, EINVAL, EOIO, EISDIR, ELIBBAD, ELOOP, ENFILE, ENOEXEC, ENOENT, ENOMEM, ENOTDIR, EFAULT, ENAMETOOLONG, EPERM, ETXTBUSY, EBADF

359
41
Tworzenie gniazda (sys_socket)
EBX/RDI = domena tworzonego gniazda
ECX/RSI = typ tworzonego gniazda
EDX/RDX = protokół dla tworzonego gniazda (zwykle 0, patrz: man 5 protocols, man 3 getprotoent)
EAX = deskryptor nowego gniazda
EAX = błąd EINVAL, EACCES, EAFNOSUPPORT, EMFILE, ENFILE, ENOBUFS/ENOMEM, EPROTONOSUPPORT

360
53
Stwórz parę połączonych gniazd (sys_socketpair)
EBX/RDI = domena tworzonych gniazd
ECX/RSI = typ tworzonych gniazd
EDX/RDX = protokół dla tworzonych gniazd (zwykle 0, patrz: man 5 protocols, man 3 getprotoent)
ESI/R10 = adres tablicy dwóch DWORDów, w których zostaną umieszczone deskryptory nowych gniazd
EAX = 0
EAX = błąd EAFNOSUPPORT, EFAULT, EMFILE, ENFILE, EOPNOTSUPP, EPROTONOSUPPORT

361
49
Przypisanie gniazda do adresu (sys_bind)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, do którego chcemy przypisać gniazdo
EDX/RDX = wielkość struktury, na którą wskazuje RSI
EAX = 0
EAX = błąd EACCES, EADDRINUSE, EBADF, EINVAL, ENOTSOCK, EADDRNOTAVAIL, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EROFS

362
42
Połączenie gniazda (sys_connect)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, z którym się łączymy
EDX/RDX = wielkość struktury, na którą wskazuje RSI
EAX = 0
EAX = błąd EACCES, EPERM, EADDRINUSE, EAFNOSUPPORT, EAGAIN, EALREADY, EBADF, ECONNREFUSED, EFAULT, EINPROGRESS, EINTR, EISCONN, ENETUNREACH, ENOTSOCK, ETIMEDOUT

363
50
Oczekiwanie na połączenia na gnieździe (sys_listen)
EBX/RDI = deskryptor gniazda
ECX/RSI = maksymalna liczba połączeń oczekujących
EAX = 0
EAX = błąd EADDRINUSE, EBADF, ENOTSOCK, EOPNOTSUPP

364
288
Przyjmowanie połączenia na gnieździe (sys_accept4)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury sockaddr (zależnej od protokołu), która otrzyma adres, z którego połączono się do tego gniazda
EDX/RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje ECX/RSI
ESI/R10 = 0 lub flagi funkcji accept4 (SOCK_NONBLOCK lub SOCK_CLOEXEC)
EAX = deskryptor gniazda do połączonego klienta
EAX = błąd EAGAIN/EWOULDBLOCK, EBADF, ECONNABORTED, EFAULT, EINTR, EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EPERM

365
55
Pobierz opcje gniazda (sys_getsockopt)
EBX/RDI = deskryptor gniazda
ECX/RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent)
EDX/RDX = nazwa opcji (odpowiednia dla protokołu)
ESI/R10 = adres zmiennej lub zmiennych, które otrzymają wartości opcji
EDI/R8 = liczba miejsc na wartości opcji w zmiennej, której adres jest w ESI/R10
EAX = 0
EAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK

366
54
Ustaw opcje gniazda (sys_setsockopt)
EBX/RDI = deskryptor gniazda
ECX/RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent)
EDX/RDX = nazwa opcji (odpowiednia dla protokołu)
ESI/R10 = adres zmiennej lub zmiennych z wartościami opcji (odpowiednich dla protokołu)
EDI/R8 = liczba wartości opcji w zmiennej, której adres jest w ESI/R10
EAX = 0
EAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK

367
51
Pobierz nazwę gniazda (sys_getsockname)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, w którym system zwróci adres, do którego gniazdo jest przypisane
EDX/RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje ECX/RSI
EAX = 0
EAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTSOCK

368
52
Pobierz nazwę klienta podłączonego do gniazda (sys_getpeername)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, w którym system zwróci adres klienta podłączonego do tego gniazda
EDX/RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje ECX/RSI
EAX = 0
EAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTCONN, ENOTSOCK

369
44
Wysyłanie danych gniazdem (sys_sendto)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres bufora z danymi do wysłania
EDX/RDX = liczba bajtów z bufora do wysłania
ESI/R10 = flagi sendto
EDI/R8 = adres struktury sockaddr (zależnej od protokołu), opisującej adres, do którego wysłać dane. Ignorowane dla gniazd opartych o połączenie
EBP/R9 = wielkość struktury, na którą wskazuje EDI/R8. Ignorowane dla gniazd opartych o połączenie
EAX = liczba wysłanych znaków
EAX = błąd EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET, EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS, ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE

370
46
Wysyłanie wiadomości gniazdem (sys_sendmsg)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury msghdr opisującej wiadomość
EDX/RDX = flagi sendmsg (te same, co dla sendto)
EAX = liczba wysłanych znaków
EAX = błąd EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET, EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS, ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE

371
45
Odbieranie danych gniazdem (sys_recvfrom)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres bufora na odebrane dane
EDX/RDX = liczba bajtów w buforze
ESI/R10 = flagi recvfrom
EDI/R8 = adres struktury sockaddr (zależnej od protokołu), która otrzyma adres, z którego otrzymano dane. Może być 0.
EBP/R9 = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje EDI/R8. Może być 0.
EAX = liczba odebranych znaków
EAX = błąd EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR, EINVAL, ENOMEM, ENOTCONN, ENOTSOCK

372
47
Odbieranie wiadomości gniazdem (sys_recvmsg)
EBX/RDI = deskryptor gniazda
ECX/RSI = adres struktury msghdr opisującej wiadomość
EDX/RDX = flagi recvmsg (te same, co dla recvfrom)
EAX = liczba odebranych znaków
EAX = błąd EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR, EINVAL, ENOMEM, ENOTCONN, ENOTSOCK

373
48
Zamknięcie części połączenia (sys_shutdown)
EBX/RDI = deskryptor gniazda
ECX/RSI = sposób zamknięcia (SHUT_RD=0 blokuje odczyty, SHUT_WR=1 blokuje zapisy, SHUT_RDWR=2 blokuje odczyty i zapisy)
EAX = 0
EAX = błąd EBADF, ENOTCONN, ENOTSOCK

374
323
sys_userfaultfd
brak danych
brak danych

375
324
Wykonaj bariery pamięci - uporządkuj operacje na pamięci (sys_membarrier)
EBX/RDI = komenda membarrier
ECX/RSI = flagi (0)
EAX = 0 dla MEMBARRIER_CMD_SHARED
EAX = zestaw obsługiwanych komend po MEMBARRIER_CMD_QUERY
EAX = błąd EINVAL, ENOSYS

376
325
Zablokowanie stron w pamięci (sys_mlock2)
EBX/RDI = adres obszaru pamięci (wyrównany do wielokrotności rozmiaru strony pamięci)
ECX/RSI = długość obszaru pamięci
EDX/RDX = flagi mlock2
EAX = 0
EAX = błąd EINVAL, EAGAIN, ENOMEM, EPERM

377
326
Skopiuj zakres danych między plikami (sys_copy_file_range)
EBX/RDI = deskryptor pliku źródłowego
ECX/RSI = adres zmiennej trzymającej pozycję początkową odczytu (może być 0 dla aktualnej pozycji) i która otrzyma nową pozycję
EDX/RDX = deskryptor pliku docelowego
ESI/R10 = adres zmiennej trzymającej pozycję początkową zapisu (może być 0 dla aktualnej pozycji) i która otrzyma nową pozycję
EDI/R8 = liczba bajtów do skopiowania
EBP/R9 = flagi (0).
EAX = liczba skopiowanych bajtów
EAX = błąd EBADF, EINVAL, EIO, ENOMEM, ENOSPC, EXDEV

378
327
Odczyt danych do wielu buforów (sys_preadv2)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = adres tablicy struktur iovec, do których zapisać dane
EDX/RDX = liczba struktur iovec spod [ECX/RSI]
ESI/R10 = numer bajtu, od którego czytać (offset w pliku)
EBP/R9 = flagi preadv2
EAX = liczba odczytanych bajtów
EAX = błąd funkcji sys_read, sys_lseek lub EINVAL

379
328
Zapis danych z wielu buforów (sys_pwritev2)
EBX/RDI = deskryptor otwartego pliku
ECX/RSI = adres tablicy struktur iovec, z których brać dane do zapisania
EDX/RDX = liczba struktur iovec spod [ECX/RSI]
ESI/R10 = numer bajtu, od którego zapisywać (offset w pliku)
EBP/R9 = flagi pwritev2 (te same, co dla preadv2)
EAX = liczba zapisanych bajtów
EAX = błąd funkcji sys_write, sys_lseek lub EINVAL



Poprzednia część (klawisz dostępu 3)
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)