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.
Numer/ EAX | x86-64 RAX | Opis | Argumenty | Zwraca |
---|---|---|---|---|
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 |