Opis funkcji systemowych syscall: 301-328

Jeśli jakaś funkcja zakończy się błędem, w 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 syscall).

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 syscall: 301-328
Numer/ RAX Opis ArgumentyZwraca
301
Zmiana znaczników fanotify na obiekcie (sys_fanotify_mark)
RDI = deskryptor fanotify
RSI = flagi fanotify_mark mówiące, co zrobić
RDX = maska zdarzeń
R10 = deskryptor obserwowanego obiektu lub katalogu, wzgledem którego brana jest ścieżka
R8 = ścieżka ASCIIZ obserwowanego obiektu (jeśli 0, brany jest deskryptor z R10)
RAX = 0
RAX = błąd EBADF, EINVAL, ENOENT, ENOMEM, ENOSPC, ENOSYS, ENOTDIR

302
Ustaw lub pobierz limity zasobów (sys_prlimit64)
RDI = PID procesu (0 = bieżący)
RSI = typ zasobu
RDX = adres struktury rlimit z nowymi limitami
R10 = adres struktury rlimit, która otrzyma bieżące limity
RAX = 0
RAX = błąd EFAULT, EINVAL, EPERM, ESRCH

303
Przerób nazwę na uchwyt do pliku względem katalogu (sys_name_to_handle_at)
RDI = deskryptor katalogu
RSI = ścieżka do obiektu względem katalogu
RDX = adres do struktury file_handle, która otrzyma wynik
R10 = adres zmiennej, która otrzyma ID systemu plików
R8 = flagi name_to_handle_at (te same, co dla sys_execveat)
RAX = 0
RAX = błąd openat lub EFAULT, EINVAL, ENOENT, ENOTDIR, EOPNOTSUPP, EOVERFLOW

304
Otwórz plik poprzez uchwyt (sys_open_by_handle_at)
RDI = ID systemu plików lub AT_FDCWD=-100 dla bieżącego katalogu
RSI = adres do struktury file_handle, która zawiera uchwyt do pliku
RDX = flagi open_by_handle_at (te same, co dla sys_open)
RAX = 0
RAX = błąd openat lub EBADF, EFAULT, EINVAL, ELOOP, EPERM, ESTALE

305
sys_clock_adjtime
brak danych
brak danych

306
Synchronizuj system plików zawierający dany plik (sys_syncfs)
RDI = deskryptor pliku otwartego na systemie plików do synchronizacji
RAX = 0
RAX = błąd EBADF

307
Wyślij wiele wiadomości z gniazda (sys_sendmmsg)
RDI = deskryptor otwartego gniazda
RSI = adres tablicy struktur mmsghdr, z których brać dane do wysłania
RDX = liczba struktur mmsghdr spod [RSI]
R10 = 0 lub zORowane flagi funkcji sendmsg
RAX = liczba wysłanych wiadomości
RAX = błąd funkcji sendmsg

308
Powiąż wątek z przestrzenią nazw (sys_setns)
RDI = deskryptor jednego z plików w /proc/[pid]/ns/
RSI = 0 (oznaczające dowolny typ przestrzeni nazw lub jeden z typów przestrzeni nazw)
RAX = 0
RAX = błąd EBADF, EINVAL, ENOMEM, EPERM

309
Pobierz procesor, na którym działa wątek (sys_getcpu)
RDI = 0 lub adres zmiennej, która otrzyma numer procesora
RSI = 0 lub adres zmiennej, która otrzyma numer węzła NUMA
RDX = adres struktury getcpu_cache, która służyła jako pamięć podręczna dla tej funkcji; nieużywane
RAX = 0
RAX=błąd EFAULT

310
Czytaj dane innego procesu (sys_process_vm_readv)
RDI = PID procesu
RSI = adres tablicy struktur iovec na odczytane dane
RDX = liczba struktur w [RSI]
R10 = adres tablicy struktur iovec z adresami danych do odczytania
R8 = liczba struktur w [R10]
R9 = flagi (nieużywane, ustawić na zero)
RAX = liczba odczytanych bajtów
RAX = błąd EINVAL, EFAULT, ENOMEM, EPERM, ESRCH

311
Zapisz dane w innym procesie (sys_process_vm_writev)
RDI = PID procesu
RSI = adres tablicy struktur iovec na dane do zapisania
RDX = liczba struktur w [RSI]
R10 = adres tablicy struktur iovec z adresami miejsc do zapisania
R8 = liczba struktur w [R10]
R9 = flagi (nieużywane, ustawić na zero)
RAX = liczba zapisanych bajtów
RAX = błąd EINVAL, EFAULT, ENOMEM, EPERM, ESRCH

312
Porównaj zasoby 2 procesów (sys_kcmp)
RDI = PID pierwszego procesu
RSI = PID drugiego procesu
RDX = typ zasobu do porównania
R10 = ID pierwszego zasobu (zależy od typu)
R8 = ID drugiego zasobu (zależy od typu)
RAX = 0, gdy dany zasób jest współdzielony w obu procesach
RAX = 1, 2, lub 3, gdy dany zasób nie jest współdzielony w obu procesach
RAX = błąd EBADF, EINVAL, EPERM, ESRCH

313
Załaduj moduł jądra z deskryptora pliku (sys_finit_module)
RDI = deskryptor otwartego pliku z modułem jądra
RSI = adres łańcucha parametrów dla modułu - nazwa=wartość (ASCIIZ)
RDX = 0 lub zORowane flagi funkcji finit_module
RAX = 0
RAX = błąd EBADMSG, EBUSY, EFAULT, ENOKEY, ENOMEM, EPERM, EBADF, EFBIG, EINVAL, ENOEXEC

314
Ustaw politykę i atrybuty schedulera (sys_sched_setattr)
RDI = PID procesu/wątku lub 0 dla bieżącego
RSI = adres struktury sched_attr z parametrami do ustawienia
RDX = flagi (0)
RAX = 0
RAX = błąd EINVAL, ESRCH, E2BIG, EBUSY, EPERM

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

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

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

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

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

320
Załaduj nowe jądro do późniejszego uruchomienia (sys_kexec_file_load)
RDI = deskryptor otwartego pliku z jądrem
RSI = deskryptor otwartego pliku z initrd
RDX = długość linii komend dla nowego jądra
R10 = adres linii komend ASCIIZ dla nowego jądra
R8 = 0 lub flagi funkcji kexec_file_load
RAX = 0
RAX = błąd EBADF, EBUSY, EINVAL, ENOMEM, ENOEXEC, EPERM

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

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

323
sys_userfaultfd
brak danych
brak danych

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

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

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

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

328
Zapis danych z wielu buforów (sys_pwritev2 )
RDI = deskryptor otwartego pliku
RSI = adres tablicy struktur iovec, z których brać dane do zapisania
RDX = liczba struktur iovec spod [RSI]
R10 = numer bajtu, od którego zapisywać (offset w pliku)
R9 = flagi pwritev2 (te same, co dla preadv2)
RAX = liczba zapisanych bajtów
RAX = 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)