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