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 |
---|---|---|---|
51 |
Pobierz nazwę gniazda (sys_getsockname) |
RDI = deskryptor gniazda 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 RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje RSI |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTSOCK |
52 |
Pobierz nazwę klienta podłączonego do gniazda (sys_getpeername) |
RDI = deskryptor gniazda 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 RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje RSI |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOBUFS, ENOTCONN, ENOTSOCK |
53 |
Stwórz parę połączonych gniazd (sys_socketpair) |
RDI = domena tworzonych gniazd RSI = typ tworzonych gniazd RDX = protokół dla tworzonych gniazd (zwykle 0, patrz: man 5 protocols, man 3 getprotoent) R10 = adres tablicy dwóch DWORDów, w których zostaną umieszczone deskryptory nowych gniazd |
RAX = 0 RAX = błąd EAFNOSUPPORT, EFAULT, EMFILE, ENFILE, EOPNOTSUPP, EPROTONOSUPPORT |
54 |
Ustaw opcje gniazda (sys_setsockopt) |
RDI = deskryptor gniazda RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent) RDX = nazwa opcji (odpowiednia dla protokołu) R10 = adres zmiennej lub zmiennych z wartościami opcji (odpowiednich dla protokołu) R8 = liczba wartości opcji w zmiennej, której adres jest w R10 |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK |
55 |
Pobierz opcje gniazda (sys_getsockopt) |
RDI = deskryptor gniazda RSI = poziom, do którego odnosi się opcja: SOL_SOCKET=1 dla gniazda lub numer protokołu (patrz: man 5 protocols, man 3 getprotoent) RDX = nazwa opcji (odpowiednia dla protokołu) R10 = adres zmiennej lub zmiennych, które otrzymają wartości opcji R8 = liczba miejsc na wartości opcji w zmiennej, której adres jest w R10 |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOPROTOOPT, ENOTSOCK |
56 |
Utwórz klon procesu (sys_clone) |
RDI = flagi klonowania RSI = wskaźnik na oddzielny stos klona RDX = wskaźnik na strukturę pt_regs lub 0 |
RAX = numer PID klona lub RAX = błąd EAGAIN, ENOMEM, EINVAL, EPERM |
57 |
Uruchomienie nowego procesu (sys_fork) |
RDI = adres struktury pt_regs |
RAX = id procesu potomnego (PID) RAX=błąd EAGAIN, ENOMEM |
58 |
Utwórz proces potomny i zablokuj rodzica (sys_vfork) |
nic |
RAX = PID procesu potomnego RAX = błąd EAGAIN, ENOMEM |
59 |
Uruchomienie innego programu (sys_execve) |
RDI=adres nazwy (ze ścieżką) programu ASCIIZ RSI = adres zakończonej dwordem 0 listy adresów argumentów uruchamianego programu ASCIIZ RDX = adres zakończonej dwordem 0 listy adresów zmiennych środowiska dla uruchamianego programu ASCIIZ |
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 |
60 |
Wyjście z programu (sys_exit) |
RDI = kod wyjścia (errorlevel) |
nie wraca do programu wywołującego |
61 |
Czekaj na zakończenie procesu (sys_wait4) |
RDI = PID procesu potomnego lub specyfikacja RSI = NULL lub adres zmiennej DWORD, która otrzyma status RDX = opcje R10 = adres struktury rusage |
RAX = PID zakończonego procesu RAX = błąd RAX = 0 dla WNOHANG |
62 |
Wyślij sygnał do procesu (sys_kill) |
RDI = numer PID procesu (patrz też specyfikacja) RSI = numer sygnału |
RAX = 0 RAX = błąd EINVAL, EPERM, ESRCH |
63 |
Pobierz informację o jądrze (sys_uname) |
RDI = adres struktury utsname |
RAX = 0 RAX = błąd EINVAL, EPERM, EFAULT |
64 |
Pobierz identyfikator zbioru semaforów (sys_semget) |
RDI = klucz identyfikujący RSI = liczba semaforów do utworzenia, gdy klucz ma wartość IPC_PRIVATE=20 lub gdy nie ma jeszcze semaforów powiązanych z tym kluczem, a flagi zawierają IPC_CREAT RDX = flagi: 0 lub zORowane wartości IPC_CREAT=00001000 (ósemkowo) i IPC_EXCL=02000 (ósemkowo), a dodatkowo przy tworzeniu semaforów, 9 najmłodszych bitów to uprawnienia (takie same, jak w funkcji open) |
RAX = identyfikator zestawu semaforów RAX = błąd EACCES, EEXIST, EINVAL, ENOENT, ENOMEM, ENOSPC |
65 |
Operacje na semaforze (sys_semop) |
RDI = identyfikator zestawu semaforów RSI = adres tablicy struktur sembuf RDX = liczba elementów w tablicy spod RSI |
RAX = 0 RAX = błąd E2BIG, EACCES, EAGAIN, EFAULT, EFBIG, EIDRM, EINTR, EINVAL, ENOMEM, ERANGE |
66 |
Kontrola semaforu (sys_semctl) |
RDI = identyfikator zestawu semaforów RSI = numer semafora RDX = komenda dla semaforów R10 = unia semun (przekazywany jest jeden z elementów) |
RAX = wynik komendy RAX = błąd EACCES, EFAULT, EIDRM, EINVAL, EPERM, ERANGE |
67 |
Odłącz współdzielony segment pamięci (sys_shmdt) |
RDI = adres współdzielonego obszaru pamięci (zwrócony przez shmat) |
RAX = 0 RAX = błąd EINVAL |
68 |
Pobierz identyfikator kolejki wiadomości (sys_msgget) |
RDI = klucz identyfikujący. Tworzona jest nowa kolejka gdy klucz ma wartość
IPC_PRIVATE=20 lub gdy nie ma jeszcze kolejki powiązanej z tym kluczem a flagi zawierają IPC_CREAT RSI = flagi: 0 lub zORowane wartości IPC_CREAT=00001000 (ósemkowo) i IPC_EXCL=02000 (ósemkowo), a dodatkowo przy tworzeniu kolejki, 9 najmłodszych bitów to uprawnienia (takie same, jak w funkcji open) |
RAX = identyfikator kolejki wiadomości RAX = błąd EACCES, EEXIST, ENOENT, ENOMEM, ENOSPC |
69 |
Wyślij wiadomość do kolejki wiadomości (sys_msgsnd) |
RDI = identyfikator kolejki wiadomości RSI = adres struktury z wiadomością do wysłania RDX = liczba bajtów do wysłania R10 = flagi: 0 lub IPC_NOWAIT=04000 (ósemkowo) |
RAX = 0 RAX = błąd EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMEM |
70 |
Odbierz wiadomość z kolejki wiadomości (sys_msgrcv) |
RDI = identyfikator kolejki wiadomości RSI = adres struktury wiadomości, która otrzyma odebraną wiadomość RDX = maksymalna liczba bajtów do odebrania R10 = typ wiadomości (0 oznacza pierwszą, R10 > 0 oznacza pierwszą tego typu, R10 < 0 oznacza pierwszą o typie niewiększym od bezwzględnej wartości R10) R8 = flagi msgrcv |
RAX = liczba bajtów zapisanych do bufora RAX = błąd E2BIG, EACCES, EAGAIN, EFAULT, EIDRM, EINTR, EINVAL, ENOMSG |
71 |
Kontrola kolejki wiadomości (sys_msgctl) |
RDI = identyfikator kolejki wiadomości RSI = komenda RDX = adres struktury msqid_ds |
RAX = wynik komendy RAX = błąd EACCES, EFAULT, EIDRM, EINVAL, EPERM |
72 |
Kontrola nad deskryptorem pliku (sys_fcntl) |
RDI = deskryptor pliku RSI = kod komendy RDX zależy od komendy |
RAX zależy od komendy RAX = błąd EACCES, EAGAIN, EBADF, EDEADLK, EFAULT, EINTR, EINVAL, EMFILE, ENOLOCK, EPERM |
73 |
Zmień blokowanie plików (sys_flock) |
RDI = deskryptor otwartego pliku RSI = operacja do wykonania |
RAX = 0 RAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
74 |
Zapisz pamięć podręczną na dysk (sys_fsync) |
RDI = deskryptor pliku, który ma być zsynchronizowany na dysk |
RAX = 0 RAX = błąd |
75 |
Zapisz bufory danych pliku na dysk (sys_fdatasync) |
RDI = deskryptor pliku, którego DANE będą zsynchronizowane (ale na przykład czas dostępu nie
będzie zmieniony) |
RAX = 0 RAX = błąd EBADF, EIO, EROFS |
76 |
Skróć plik (sys_truncate) |
RDI = adres nazwy pliku ASCIIZ RSI = liczba bajtów, do której ma zostać skrócony plik |
RAX = 0 RAX = błąd |
77 |
Skróć plik (sys_ftruncate) |
RDI = deskryptor pliku otwartego do zapisu RSI = liczba bajtów, do której ma zostać skrócony plik |
RAX = 0 RAX = błąd |
78 |
Pobierz wpisy o katalogach (sys_getdents) |
RDI = deskryptor otwartego katalogu RSI = adres obszaru pamięci na struktury dirent RDX = rozmiar obszaru pamięci pod [RSI] |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR |
79 |
Pobierz bieżący katalog roboczy (sys_getcwd) |
RDI = adres bufora, który otrzyma ścieżkę RSI = długość tego bufora |
RAX = RDI RAX=NULL, gdy błąd ERANGE, EACCES, EFAULT, EINVAL, ENOENT |
80 |
Zmiana katalogu (sys_chdir) |
RDI = adres nazwy nowego katalogu ASCIIZ |
RAX = 0 RAX = błąd EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR |
81 |
Zmień katalog roboczy (sys_fchdir) |
RDI = deskryptor otwartego katalogu |
RAX = 0 RAX = błąd EBADF, EACCES i inne |
82 |
Przenieś plik/Zmień nazwę pliku (sys_rename) |
RDI=adres starej nazwy (i ewentualnie ścieżki) ASCIIZ RSI=adres nowej nazwy (i ewentualnie ścieżki) ASCIIZ |
RAX = 0 RAX = błąd EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne błędy systemu plików) |
83 |
Utwórz katalog (sys_mkdir) |
RDI = adres ścieżki/nazwy ASCIIZ RSI = prawa dostępu / tryb |
RAX = 0 RAX = błąd - każdy związany z systemem plików lub prawami dostępu |
84 |
Usuń katalog (sys_rmdir) |
RDI = adres ścieżki/nazwy ASCIIZ |
RAX = 0 RAX = błąd EACCES, EBUSY, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, ENOTEMPTY, EPERM, EROFS |
85 |
Utworzenie pliku (sys_creat, nie create!) |
RDI = adres nazwy pliku ASCIIZ RSI = prawa dostępu / tryb |
RAX = deskryptor pliku RAX = błąd EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO, EROFS, ETXTBSY |
86 |
Utworzenie twardego dowiązania do pliku (sys_link) |
RDI = adres nazwy istniejącego pliku ASCIIZ RSI = adres nazwy nowego pliku ASCIIZ |
RAX = 0 RAX=błąd EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV |
87 |
Usunięcie pliku (sys_unlink) |
RDI = adres nazwy pliku ASCIIZ |
RAX = 0 RAX=błąd EACCES, EFAULT, EIO, EISDIR, ELOOP, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EPERM, EROFS |
88 |
Stwórz dowiązanie symboliczne do pliku (sys_symlink) |
RDI = adres nazwy pliku ASCIIZ RSI = adres nazwę linku ASCIIZ |
RAX = 0 RAX = błędy związane z uprawnieniami lub systemem plików |
89 |
Przeczytaj zawartość linku symbolicznego (sys_readlink) |
RDI = adres nazwy dowiązania symbolicznego ASCIIZ RSI = adres bufora, który otrzyma przeczytaną informację RDX = długość bufora |
RAX = liczba przeczytanych znaków RAX = błąd |
90 |
Zmiana uprawnień (sys_chmod) |
RDI = adres nazwy pliku/katalogu ASCIIZ RSI = nowe prawa dostępu |
RAX = 0 RAX = błąd EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EPERM, EROFS |
91 |
Zmiana uprawnień (sys_fchmod) |
RDI = deskryptor otwartego pliku RSI = nowe prawa dostępu |
RAX = 0 RAX = błąd |
92 |
Zmiana właściciela pliku (sys_chown) |
RDI=adres ścieżki do pliku RSI = UID nowego właściciela RDX = GID nowej grupy |
RAX = 0 RAX = błąd na przykład EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP |
93 |
Zmiana właściciela (sys_fchown) |
RDI = deskryptor otwartego pliku RSI = nowy numer użytkownika RDX = nowy numer grupy |
RAX = 0 RAX = błąd |
94 |
Zmiana właściciela (sys_lchown) |
RDI = adres nazwy pliku/katalogu ASCIIZ RSI = nowy numer użytkownika RDX = nowy numer grupy |
RAX = 0 RAX = błąd EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EACCES, ELOOP i inne |
95 |
Ustaw maskę uprawnień przy tworzeniu plików (sys_umask) |
RDI = maska, patrz prawa dostępu / tryb Gdy tworzymy plik o uprawnieniach X, naprawdę ma on uprawnienia X AND (NOT umask) |
RAX = poprzednia umask |
96 |
Pobierz czas (sys_gettimeofday) |
RDI = adres struktury timeval RSI = adres struktury timezone |
RAX = 0 i wynik zapisany w strukturach RAX = błąd EFAULT, EINVAL, EPERM |
97 |
Pobierz limity zasobów (sys_getrlimit) |
RDI = numer zasobu RSI = adres struktury rlimit |
RAX = 0 RAX = błąd EFAULT, EINVAL, EPERM |
98 |
Pobierz zużycie zasobów (sys_getrusage) |
RDI = numer użytkownika (who) RSI = adres struktury rusage |
RAX = 0 RAX = błąd EFAULT, EINVAL, EPERM |
99 |
Pobierz statystyki systemowe (sys_sysinfo) |
RDI = adres struktury sysinfo |
RAX = 0 RAX = błąd |
100 |
Pobierz czasy procesów (sys_times) |
RDI = adres struktury tms |
RAX = liczba taktów zegara EAX = błąd |