   #Start Prev Contents Funkcje x86-64: 301-312

                   Opis funkcji przerwania int 80h: 351-379

   Jesli jakas funkcja zakonczy sie bledem, w EAX/RAX zwracana jest
   wartosc ujemna z przedzialu od -4096 do -1 wlacznie.

   Z drugiej strony, opisy funkcji na stronach manuala mowia, ze zwracane
   jest -1, a wartosc bledu jest zapisywana do zmiennej errno z
   biblioteki GLIBC. Dzieje sie tak tylko w przypadku, gdy korzystamy z
   interfejsu jezyka C (czyli deklarujemy i uruchamiamy zewnetrzne
   funkcje odpowiadajace wywolaniom systemowym i linkujemy nasz program z
   biblioteka jezyka C), a nie bezposrednio z wywolan systemowych (czyli
   przerwania int 80h).

   Najbardziej aktualne informacje o funkcjach systemowych mozna znalezc
   zazwyczaj w sekcji 2 (lub 3) manuala, na przyklad man 2 open.

   Najnowsze wersje jadra mozna znalezc na www.kernel.org, a pliki z
   lista funkcji i ich numerow sa pod sciezkami:
     * arch/x86/include/asm/unistd_{32,64}.h
     * arch/x86/syscalls/syscall_{32,64}.tbl
     * arch/x86/entry/syscalls/syscall_{32,64}.tbl

   Najnowsze wersje stron manuala mozna znalezc tu:
   www.kernel.org/pub/linux/docs/man-pages.

   Napis ASCIIZ oznacza lancuch znakow ASCII zakonczony znakiem/bajtem
   Zerowym.

   Jesli potrzeba, przy kazdej funkcji jest odnosnik do opisu argumentow
   i innych dodatkowych informacji: typow danych, wartosci bledow,
   mozliwych wartosci parametrow itp.

   CAPTION: Podstawowe funkcje przerwania 80h: 351-379

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   351
   314
   Ustaw polityke i atrybuty schedulera (sys_sched_setattr)
   EBX/RDI = PID procesu/watku lub 0 dla biezacego
   ECX/RSI = adres struktury sched_attr z parametrami do ustawienia
   EDX/RDX = flagi (0)
   EAX = 0
   EAX = blad EINVAL, ESRCH, E2BIG, EBUSY, EPERM
     _________________________________________________________________

   352
   315
   Pobierz polityke i atrybuty schedulera (sys_sched_getattr)
   EBX/RDI = PID procesu/watku lub 0 dla biezacego
   ECX/RSI = adres struktury sched_attr, ktora otrzyma aktualne parametry
   EDX/RDX = rozmiar struktury podanej w ECX/RSI
   ESI/R10 = flagi (0)
   EAX = 0
   EAX = blad EINVAL, ESRCH, E2BIG
     _________________________________________________________________

   353
   316
   Przenies plik/Zmien nazwe pliku wzglednie do katalogu (sys_renameat2)
   EBX/RDI = deskryptor otwartego katalogu zrodlowego lub wartosc
   AT_FDCWD=-100 oznaczajaca katalog biezacy
   ECX/RSI = adres starej nazwy (i ewentualnie sciezki) ASCIIZ
   EDX/RDX = deskryptor otwartego katalogu docelowego
   ESI/R10 = adres nowej nazwy (i ewentualnie sciezki) ASCIIZ
   EDI/R8 = 0 lub flagi funkcji renameat2
   EAX = 0
   EAX = blad 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 = blad EACCES, EFAULT, EINVAL, ENOMEM, ESRCH
     _________________________________________________________________

   355
   318
   Pobierz serie losowych bajtow (sys_getrandom)
   EBX/RDI = bufor do umieszczenia danych
   ECX/RSI = dlugosc bufora w EBX/RDI
   EDX/RDX = 0 lub flagi funkcji getrandom
   EAX = liczba zwroconych bajtow
   EAX = blad EINVAL, EFAULT, EAGAIN, EINTR
     _________________________________________________________________

   356
   319
   Utworz anonimowy plik (sys_memfd_create)
   EBX/RDI = nazwa pliku
   ECX/RSI = 0 lub flagi funkcji memfd_create
   EAX = deskryptor utworzonego pliku
   EAX = blad EFAULT, EINVAL, EMFILE, ENFILE, ENOMEM
     _________________________________________________________________

   357
   321
   Wykonaj operacje 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 = blad EINVAL, EFAULT, EAGAIN, EINTR
     _________________________________________________________________

   358
   322
   Uruchomienie innego programu wzglednie do katalogu (sys_execveat)
   EBX/RDI = deskryptor otwartego katalogu lub wartosc AT_FDCWD=-100
   ECX/RSI = adres nazwy (ze sciezka) programu ASCIIZ
   EDX/RDX = adres zakonczonej dwordem 0 listy adresow argumentow
   uruchamianego programu ASCIIZ
   ESI/R10 = adres zakonczonej dwordem 0 listy adresow zmiennych
   srodowiska dla uruchamianego programu ASCIIZ
   EDI/R8 = 0 lub flagi funkcji execveat
   nie wraca do programu wywolujacego
   EAX = blad 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 = protokol dla tworzonego gniazda (zwykle 0, patrz: man 5
   protocols, man 3 getprotoent)
   EAX = deskryptor nowego gniazda
   EAX = blad EINVAL, EACCES, EAFNOSUPPORT, EMFILE, ENFILE,
   ENOBUFS/ENOMEM, EPROTONOSUPPORT
     _________________________________________________________________

   360
   53
   Stworz pare polaczonych gniazd (sys_socketpair)
   EBX/RDI = domena tworzonych gniazd
   ECX/RSI = typ tworzonych gniazd
   EDX/RDX = protokol dla tworzonych gniazd (zwykle 0, patrz: man 5
   protocols, man 3 getprotoent)
   ESI/R10 = adres tablicy dwoch DWORDow, w ktorych zostana umieszczone
   deskryptory nowych gniazd
   EAX = 0
   EAX = blad EAFNOSUPPORT, EFAULT, EMFILE, ENFILE, EOPNOTSUPP,
   EPROTONOSUPPORT
     _________________________________________________________________

   361
   49
   Przypisanie gniazda do adresu (sys_bind)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, do ktorego chcemy przypisac gniazdo
   EDX/RDX = wielkosc struktury, na ktora wskazuje RSI
   EAX = 0
   EAX = blad EACCES, EADDRINUSE, EBADF, EINVAL, ENOTSOCK, EADDRNOTAVAIL,
   EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EROFS
     _________________________________________________________________

   362
   42
   Polaczenie gniazda (sys_connect)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, z ktorym sie laczymy
   EDX/RDX = wielkosc struktury, na ktora wskazuje RSI
   EAX = 0
   EAX = blad EACCES, EPERM, EADDRINUSE, EAFNOSUPPORT, EAGAIN, EALREADY,
   EBADF, ECONNREFUSED, EFAULT, EINPROGRESS, EINTR, EISCONN, ENETUNREACH,
   ENOTSOCK, ETIMEDOUT
     _________________________________________________________________

   363
   50
   Oczekiwanie na polaczenia na gniezdzie (sys_listen)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = maksymalna liczba polaczen oczekujacych
   EAX = 0
   EAX = blad EADDRINUSE, EBADF, ENOTSOCK, EOPNOTSUPP
     _________________________________________________________________

   364
   288
   Przyjmowanie polaczenia na gniezdzie (sys_accept4)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury sockaddr (zaleznej od protokolu), ktora
   otrzyma adres, z ktorego polaczono sie do tego gniazda
   EDX/RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc
   struktury, na ktora wskazuje ECX/RSI
   ESI/R10 = 0 lub flagi funkcji accept4 (SOCK_NONBLOCK lub SOCK_CLOEXEC)
   EAX = deskryptor gniazda do polaczonego klienta
   EAX = blad 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 ktorego odnosi sie opcja: SOL_SOCKET=1 dla
   gniazda lub numer protokolu (patrz: man 5 protocols, man 3
   getprotoent)
   EDX/RDX = nazwa opcji (odpowiednia dla protokolu)
   ESI/R10 = adres zmiennej lub zmiennych, ktore otrzymaja wartosci opcji
   EDI/R8 = liczba miejsc na wartosci opcji w zmiennej, ktorej adres jest
   w ESI/R10
   EAX = 0
   EAX = blad EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK
     _________________________________________________________________

   366
   54
   Ustaw opcje gniazda (sys_setsockopt)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = poziom, do ktorego odnosi sie opcja: SOL_SOCKET=1 dla
   gniazda lub numer protokolu (patrz: man 5 protocols, man 3
   getprotoent)
   EDX/RDX = nazwa opcji (odpowiednia dla protokolu)
   ESI/R10 = adres zmiennej lub zmiennych z wartosciami opcji
   (odpowiednich dla protokolu)
   EDI/R8 = liczba wartosci opcji w zmiennej, ktorej adres jest w ESI/R10
   EAX = 0
   EAX = blad EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK
     _________________________________________________________________

   367
   51
   Pobierz nazwe gniazda (sys_getsockname)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, w ktorym system zwroci adres, do ktorego gniazdo jest
   przypisane
   EDX/RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc
   struktury, na ktora wskazuje ECX/RSI
   EAX = 0
   EAX = blad EBADF, EFAULT, EINVAL, ENOBUFS, ENOTSOCK
     _________________________________________________________________

   368
   52
   Pobierz nazwe klienta podlaczonego do gniazda (sys_getpeername)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, w ktorym system zwroci adres klienta podlaczonego do tego
   gniazda
   EDX/RDX = adres zmiennej (32-bitowej), ktora otrzyma wielkosc
   struktury, na ktora wskazuje ECX/RSI
   EAX = 0
   EAX = blad EBADF, EFAULT, EINVAL, ENOBUFS, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   369
   44
   Wysylanie danych gniazdem (sys_sendto)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres bufora z danymi do wyslania
   EDX/RDX = liczba bajtow z bufora do wyslania
   ESI/R10 = flagi sendto
   EDI/R8 = adres struktury sockaddr (zaleznej od protokolu), opisujacej
   adres, do ktorego wyslac dane. Ignorowane dla gniazd opartych o
   polaczenie
   EBP/R9 = wielkosc struktury, na ktora wskazuje EDI/R8. Ignorowane dla
   gniazd opartych o polaczenie
   EAX = liczba wyslanych znakow
   EAX = blad EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET,
   EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS,
   ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE
     _________________________________________________________________

   370
   46
   Wysylanie wiadomosci gniazdem (sys_sendmsg)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury msghdr opisujacej wiadomosc
   EDX/RDX = flagi sendmsg (te same, co dla sendto)
   EAX = liczba wyslanych znakow
   EAX = blad 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 bajtow w buforze
   ESI/R10 = flagi recvfrom
   EDI/R8 = adres struktury sockaddr (zaleznej od protokolu), ktora
   otrzyma adres, z ktorego otrzymano dane. Moze byc 0.
   EBP/R9 = adres zmiennej (32-bitowej), ktora otrzyma wielkosc
   struktury, na ktora wskazuje EDI/R8. Moze byc 0.
   EAX = liczba odebranych znakow
   EAX = blad EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR,
   EINVAL, ENOMEM, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   372
   47
   Odbieranie wiadomosci gniazdem (sys_recvmsg)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = adres struktury msghdr opisujacej wiadomosc
   EDX/RDX = flagi recvmsg (te same, co dla recvfrom)
   EAX = liczba odebranych znakow
   EAX = blad EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR,
   EINVAL, ENOMEM, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   373
   48
   Zamkniecie czesci polaczenia (sys_shutdown)
   EBX/RDI = deskryptor gniazda
   ECX/RSI = sposob zamkniecia (SHUT_RD=0 blokuje odczyty, SHUT_WR=1
   blokuje zapisy, SHUT_RDWR=2 blokuje odczyty i zapisy)
   EAX = 0
   EAX = blad EBADF, ENOTCONN, ENOTSOCK
     _________________________________________________________________

   374
   323
   sys_userfaultfd
   brak danych
   brak danych
     _________________________________________________________________

   375
   324
   Wykonaj bariery pamieci - uporzadkuj operacje na pamieci
   (sys_membarrier)
   EBX/RDI = komenda membarrier
   ECX/RSI = flagi (0)
   EAX = 0 dla MEMBARRIER_CMD_SHARED
   EAX = zestaw obslugiwanych komend po MEMBARRIER_CMD_QUERY
   EAX = blad EINVAL, ENOSYS
     _________________________________________________________________

   376
   325
   Zablokowanie stron w pamieci (sys_mlock2)
   EBX/RDI = adres obszaru pamieci (wyrownany do wielokrotnosci rozmiaru
   strony pamieci)
   ECX/RSI = dlugosc obszaru pamieci
   EDX/RDX = flagi mlock2
   EAX = 0
   EAX = blad EINVAL, EAGAIN, ENOMEM, EPERM
     _________________________________________________________________

   377
   326
   Skopiuj zakres danych miedzy plikami (sys_copy_file_range)
   EBX/RDI = deskryptor pliku zrodlowego
   ECX/RSI = adres zmiennej trzymajacej pozycje poczatkowa odczytu (moze
   byc 0 dla aktualnej pozycji) i ktora otrzyma nowa pozycje
   EDX/RDX = deskryptor pliku docelowego
   ESI/R10 = adres zmiennej trzymajacej pozycje poczatkowa zapisu (moze
   byc 0 dla aktualnej pozycji) i ktora otrzyma nowa pozycje
   EDI/R8 = liczba bajtow do skopiowania
   EBP/R9 = flagi (0).
   EAX = liczba skopiowanych bajtow
   EAX = blad EBADF, EINVAL, EIO, ENOMEM, ENOSPC, EXDEV
     _________________________________________________________________

   378
   327
   Odczyt danych do wielu buforow (sys_preadv2)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres tablicy struktur iovec, do ktorych zapisac dane
   EDX/RDX = liczba struktur iovec spod [ECX/RSI]
   ESI/R10 = numer bajtu, od ktorego czytac (offset w pliku)
   EBP/R9 = flagi preadv2
   EAX = liczba odczytanych bajtow
   EAX = blad funkcji sys_read, sys_lseek lub EINVAL
     _________________________________________________________________

   379
   328
   Zapis danych z wielu buforow (sys_pwritev2)
   EBX/RDI = deskryptor otwartego pliku
   ECX/RSI = adres tablicy struktur iovec, z ktorych brac dane do
   zapisania
   EDX/RDX = liczba struktur iovec spod [ECX/RSI]
   ESI/R10 = numer bajtu, od ktorego zapisywac (offset w pliku)
   EBP/R9 = flagi pwritev2 (te same, co dla preadv2)
   EAX = liczba zapisanych bajtow
   EAX = blad funkcji sys_write, sys_lseek lub EINVAL
     _________________________________________________________________

   Poprzednia czesc (klawisz dostepu 3)
   Spis tresci off-line (klawisz dostepu 1)
   Spis tresci on-line (klawisz dostepu 2)
   Ulatwienia dla niepelnosprawnych (klawisz dostepu 0)
