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 |
---|---|---|---|
0 |
Czytanie z pliku (sys_read) |
RDI = deskryptor pliku RSI = adres bufora docelowego RDX = liczba bajtów do przeczytania |
RAX=liczba przeczytanych bajtów RAX = błąd EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR |
1 |
Zapis do pliku (sys_write) |
RDI = deskryptor pliku RSI = adres bufora źródłowego RDX = liczba bajtów do zapisania |
RAX=liczba zapisanych bajtów RAX = błąd EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, ENOSPC, EPIPE |
2 |
Otwarcie pliku (sys_open) |
RDI = adres nazwy pliku ASCIIZ RSI = bity dostępu RDX = 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 |
3 |
Zamknięcie pliku (sys_close) |
RDI = deskryptor pliku |
RAX = 0 RAX = błąd EBADF, EINTR, EIO |
4 |
Pobierz status pliku (sys_stat) |
RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest
status obiektu docelowego. RSI = adres struktury stat |
RAX = 0 RAX = błąd |
5 |
Pobierz status pliku (sys_fstat) |
RDI = deskryptor otwartego pliku RSI = adres struktury stat |
RAX = 0 RAX = błąd |
6 |
Pobierz status pliku (sys_lstat) |
RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany
jest status linku, a nie obiektu docelowego. RSI = adres struktury stat |
RAX = 0 RAX = błąd |
7 |
Czekaj na zdarzenia na deskryptorze (sys_poll) |
RDI = adres tablicy struktur pollfd RSI = liczba struktur pollfd w tablicy RDX = max. czas na oczekiwanie w milisekundach (-1 = nieskończoność) |
RAX = liczba odpowiednich deskryptorów RAX = 0, gdy czas upłynął RAX = błąd EFAULT, EINTR, EINVAL |
8 |
Zmiana bieżącej pozycji w pliku (sys_lseek) |
RDI = deskryptor pliku RSI = liczba bajtów, o którą chcemy się przesunąć RDX = odkąd zaczynamy ruch |
RAX = nowa pozycja względem początku pliku RAX = błąd EBADF, EINVAL, EISPIPE |
9 |
Mapuj plik/urządzenie do pamięci (sys_mmap) |
-- zgodne z man 2 mmap-- RDI = proponowany adres początkowy RSI = długość mapowanego obszaru RDX = ochrona R10 = flagi mapowania R8 = deskryptor mapowanego pliku, jeśli mapowanie nie jest anonimowe R9 = offset początku mapowanych danych w pliku |
RAX = rzeczywisty adres mapowania RAX = błąd |
10 |
Kontrola dostępu do obszaru pamięci (sys_mprotect) |
RDI = adres obszaru pamięci (wyrównany do granicy strony) RSI = długość tego obszaru w bajtach (względem strony pamięci) RDX = bity włączające ochronę |
RAX=0 RAX = błąd EACCES, ENOMEM, EINVAL, EFAULT |
11 |
Odmapuj plik/urządzenie z pamięci (sys_munmap) |
RDI = adres początkowy obszaru RSI = liczba bajtów |
RAX = 0 RAX = błąd |
12 |
Alokacja i dealokacja pamięci (sys_brk) |
RDI = 0, aby poznać aktualny najwyższy adres sekcji .bss RDI = (wirtualny) adres nowego wierzchołka .bss, powyżej spodu sekcji danych i poniżej bibliotek |
RAX = nowy najwyższy adres RAX = błąd ENOMEM |
13 |
Pobierz i zmień procedurę obsługi sygnału (sys_rt_sigaction) |
RDI = numer sygnału RSI = adres struktury sigaction opisującą bieżącą procedurę RDX = adres struktury sigaction opisującą starą procedurę R10 = rozmiar struktury sigset_t |
RAX = 0 RAX=błąd EINVAL, EFAULT |
14 |
Pobierz i zmień blokowane sygnały (sys_rt_sigprocmask) |
RDI = działanie RSI = adres zestawu sygnałów (tablicy 32 DWORDów) RDX = adres zestawu sygnałów, który otrzyma starą maskę sygnałów R10 = rozmiar struktury sigset_t |
RAX = 0 RAX=błąd EINVAL, EFAULT |
15 |
Powrót z procedury obsługi sygnału (sys_rt_sigreturn) |
-- funkcja wewnętrzna, nie używać-- RDI = parametr zależny od architektury |
nigdy nie powraca |
16 |
Manipulacja urządzeniem znakowym (sys_ioctl) |
RDI = deskryptor pliku RSI = kod komendy (man 2 ioctl_list) RDX = adres zapisywalnego obszaru danych lub innej struktury, zależy od komendy |
RAX = 0 RAX = błąd EBADF, EFAULT, EINVAL, ENOTTY |
17 |
Czytaj z danej pozycji w pliku (sys_pread/sys_pread64) |
RDI = deskryptor otwartego pliku RSI = adres bufora, który otrzyma dane RDX = liczba bajtów do odczytania R10 = pozycja, z której zacząć czytanie |
RAX = liczba przeczytanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian) RAX = błąd (jak w sys_read) |
18 |
Zapisuj na danej pozycji w pliku (sys_pwrite/sys_pwrite64) |
RDI = deskryptor otwartego pliku RSI = adres bufora, z którego pobierać dane do zapisania RDX = liczba bajtów do zapisania R10 = pozycja, od której zacząć zapisywanie |
RAX = liczba zapisanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian) RAX = błąd (jak w sys_read) |
19 |
Czytaj wektor (sys_readv) |
RDI = deskryptor otwartego obiektu, z którego będą czytane dane RSI = adres tablicy struktur iovec RDX = liczba struktur iovec, do których będą czytane dane |
RAX = 0 RAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
20 |
Zapisz wektor (sys_writev) |
RDI = deskryptor otwartego obiektu, do którego będą zapisane dane RSI = adres tablicy struktur iovec RDX = liczba struktur iovec, z których będą czytane dane do zapisania |
RAX = 0 RAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
21 |
Sprawdź uprawnienia dostępu do pliku (sys_access) |
RDI = adres nazwy pliku ASCIIZ RSI = prawa dostępu / tryb (wartości R_OK, W_OK, X_OK) |
RAX = 0 RAX = błąd - każdy związany z systemem plików i plikami |
22 |
Utwórz potok (sys_pipe) |
RDI = adres tablicy dwóch DWORDów |
RAX = 0 i pod [RDI]: deskryptor odczytu z potoku fd(0) pod [RDI], deskryptor zapisu do potoku
fd(1) pod [RDI+4] RAX = błąd EFAULT, EMFILE, ENFILE |
23 |
Oczekiwanie zmiany stanu deskryptora(ów) (sys_select) |
RDI = najwyższy numer spośród deskryptorów + 1 RSI = adres tablicy deskryptorów sprawdzanych, czy można z nich czytać RDX = adres tablicy deskryptorów sprawdzanych, czy można do nich pisać R10 = adres tablicy deskryptorów sprawdzanych, czy nie wystąpił u nich wyjątek R8 = adres struktury timeval zawierającą maksymalny czas oczekiwania |
RAX = całkowita liczba deskryptorów, która pozostała w tablicach RAX = 0, gdy skończył się czas RAX = wystąpił błąd |
24 |
Oddanie procesora innym procesom (sys_sched_yield) |
nic |
RAX = 0 RAX = błąd. |
25 |
Przemapuj adres wirtualny (sys_mremap) |
RDI = stary adres RSI = rozmiar obszaru do przemapowania RDX = żądany rozmiar R10 = zero lub flagi przemapowania R8 = nowy adres, jeśli dano flagę MREMAP_FIXED |
RAX = wskaźnik do nowego obszaru RAX = sygnał lub błąd EFAULT, EAGAIN, ENOMEM, EINVAL |
26 |
Synchronizuj mapowany plik z pamięcią (sys_msync) |
RDI = adres do zrzucenia na dysk (zostaną zrzucone zmodyfikowane strony pamięci
zawierającej ten adres i co najwyżej RSI-1 zmienionych następnych) RSI = liczba bajtów/rozmiar obszaru do zrzucenia na dysk RDX = 0 lub zORowane flagi |
RAX = 0 RAX = błąd EBUSY, EIO, ENOMEM, EINVAL, ENOLCK |
27 |
Pobierz informację, czy strony pamięci są w rdzeniu procesu (sys_mincore) |
RDI = adres początkowy sprawdzanych bajtów RSI = liczba sprawdzanych bajtów RDX = adres tablicy bajtów zdolnej pomieścić tyle bajtów, ile stron pamięci jest sprawdzanych. Najmłodszy bit w każdym bajcie będzie mówił o tym, czy dana strona pamięci jest obecna (=1), czy zrzucona na dysk (=0) |
RAX = 0 RAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM |
28 |
Porada dla jądra o użyciu pamięci (sys_madvise, sys_madvise1) |
RDI = adres początkowy bajtów, których dotoczy porada RSI = liczba tych bajtów RDX = porada |
RAX = 0 RAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM |
29 |
Alokuj współdzielony segment pamięci (sys_shmget) |
RDI = klucz opisujący segment pamięci RSI = długość segmentu RDX = flagi shmget |
RAX = identyfikator segmentu RAX = błąd EACCES, EEXIST, EINVAL, ENFILE, ENOENT, ENOMEM, ENOSPC, EPERM |
30 |
Podłącz współdzielony segment pamięci (sys_shmat) |
RDI = identyfikator segmentu pamięci RSI = adres podłączenia segmentu do pamięci procesu lub 0 RDX = flagi shmat |
RAX = adres podłączonego segmentu RAX = błąd EACCES, EINVAL, ENOMEM |
31 |
Kontrola współdzielonej pamięci (sys_shmctl) |
RDI = identyfikator segmentu pamięci RSI = rozkaz RDX = adres struktury shmid_ds |
RAX = wartość odpowiednia dla rozkazu RAX = błąd EACCES, EINVAL, EFAULT, EIDRM, ENOMEM, EOVERFLOW, EPERM |
32 |
Zduplikuj deskryptor pliku (sys_dup) |
RDI = stary deskryptor |
RAX = nowy deskryptor RAX = błąd EBADF, EMFILE |
33 |
Zamień deskryptor zduplikowanym deskryptorem pliku (sys_dup2) |
RDI = deskryptor do zduplikowania RSI = deskryptor, do którego powinien być przyznany duplikat |
RAX = zduplikowany deskryptor RAX = błąd EBADF, EMFILE, EBUSY, EINTR |
34 |
Pauza - śpij aż do otrzymania sygnału (sys_pause) |
nic |
wraca tylko po sygnale, o ile procedura jego obsługi ma powrót.
RAX = EINTR po sygnale |
35 |
Pauza w wykonywaniu programu (sys_nanosleep) |
RDI = adres struktury timespec RSI = NULL lub adres modyfikowalnej struktury timespec, która otrzyma resztkę czasu, która została |
RAX = 0 RAX = sygnał lub błąd EINTR, EINVAL |
36 |
Pobierz wartość czasomierza (sys_getitimer) |
RDI = numer czasomierza RSI = adres struktury itimerval, która otrzyma wartość czasomierza | RAX = 0 RAX = błąd |
37 |
Alarm - wysłanie sygnału SIGALARM (sys_alarm) |
RDI = sekundy |
RAX = 0 lub liczba sekund do wykonania poprzednich alarmów |
38 |
Ustaw wartość czasomierza (sys_setitimer) |
RDI = numer czasomierza RSI = adres struktury itimerval zawierającej nową wartość czasomierza RSI = adres struktury itimerval, która otrzyma starą wartość czasomierza |
RAX = 0 RAX = błąd |
39 |
Pobierz identyfikator bieżącego procesu (sys_getpid) |
nic |
RAX = PID bieżącego procesu |
40 |
Kopiuj dane między deskryptorami plików (sys_sendfile, sys_sendfile64) |
RDI = deskryptor pliku wyjściowego, otwartego do zapisu RSI = deskryptor pliku wejściowego RDX = adres 64-bitowej zmiennej - numeru bajtu w pliku źródłowym, od którego zacząć kopiować R10 = liczba bajtów do skopiowania |
RAX = liczba zapisanych bajtów RAX = błąd EBADF, EAGAIN, EINVAL, ENOMEM, EIO, EFAULT |
41 |
Tworzenie gniazda (sys_socket) |
RDI = domena tworzonego gniazda RSI = typ tworzonego gniazda RDX = protokół dla tworzonego gniazda (zwykle 0, patrz: man 5 protocols, man 3 getprotoent) |
RAX = deskryptor nowego gniazda RAX = błąd EINVAL, EACCES, EAFNOSUPPORT, EMFILE, ENFILE, ENOBUFS/ENOMEM, EPROTONOSUPPORT |
42 |
Połączenie gniazda (sys_connect) |
RDI = deskryptor gniazda RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, z którym się łączymy RDX = wielkość struktury, na którą wskazuje RSI |
RAX = 0 RAX = błąd EACCES, EPERM, EADDRINUSE, EAFNOSUPPORT, EAGAIN, EALREADY, EBADF, ECONNREFUSED, EFAULT, EINPROGRESS, EINTR, EISCONN, ENETUNREACH, ENOTSOCK, ETIMEDOUT |
43 |
Przyjmowanie połączenia na gnieździe (sys_accept) |
RDI = deskryptor gniazda RSI = adres struktury sockaddr (zależnej od protokołu), która otrzyma adres, z którego połączono się do tego gniazda RDX = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje RSI |
RAX = deskryptor gniazda do połączonego klienta RAX = błąd EAGAIN/EWOULDBLOCK, EBADF, ECONNABORTED, EFAULT, EINTR, EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EPERM |
44 |
Wysyłanie danych gniazdem (sys_sendto) |
RDI = deskryptor gniazda RSI = adres bufora z danymi do wysłania RDX = liczba bajtów z bufora do wysłania R10 = flagi sendto 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 R9 = wielkość struktury, na którą wskazuje R8. Ignorowane dla gniazd opartych o połączenie |
RAX = liczba wysłanych znaków RAX = błąd EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET, EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS, ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE |
45 |
Odbieranie danych gniazdem (sys_recvfrom) |
RDI = deskryptor gniazda RSI = adres bufora na odebrane dane RDX = liczba bajtów w buforze R10 = flagi recvfrom R8 = adres struktury sockaddr (zależnej od protokołu), która otrzyma adres, z którego otrzymano dane. Może być 0. R9 = adres zmiennej (32-bitowej), która otrzyma wielkość struktury, na którą wskazuje R8. Może być 0. |
RAX = liczba odebranych znaków RAX = błąd EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR, EINVAL, ENOMEM, ENOTCONN, ENOTSOCK |
46 |
Wysyłanie wiadomości gniazdem (sys_sendmsg) |
RDI = deskryptor gniazda RSI = adres struktury msghdr opisującej wiadomość RDX = flagi sendmsg (te same, co dla sendto) |
RAX = liczba wysłanych znaków RAX = błąd EACCES, EAGAIN, EWOULDBLOCK, EBADF, ECONNRESET, EDESTADDRREQ, EFAULT, EINTR, EINVAL, EISCONN, EMSGSIZE, ENOBUFS, ENOMEM, ENOTCONN, ENOTSOCK, EOPNOTSUPP, EPIPE |
47 |
Odbieranie wiadomości gniazdem (sys_recvmsg) |
RDI = deskryptor gniazda RSI = adres struktury msghdr opisującej wiadomość RDX = flagi recvmsg (te same, co dla recvfrom) |
RAX = liczba odebranych znaków RAX = błąd EAGAIN, EWOULDBLOCK, EBADF, ECONNREFUSED, EFAULT, EINTR, EINVAL, ENOMEM, ENOTCONN, ENOTSOCK |
48 |
Zamknięcie części połączenia (sys_shutdown) |
RDI = deskryptor gniazda RSI = sposób zamknięcia (SHUT_RD=0 blokuje odczyty, SHUT_WR=1 blokuje zapisy, SHUT_RDWR=2 blokuje odczyty i zapisy) |
RAX = 0 RAX = błąd EBADF, ENOTCONN, ENOTSOCK |
49 |
Przypisanie gniazda do adresu (sys_bind) |
RDI = deskryptor gniazda RSI = adres struktury sockaddr (zależnej od protokołu), opisującej adres, do którego chcemy przypisać gniazdo RDX = wielkość struktury, na którą wskazuje RSI |
RAX = 0 RAX = błąd EACCES, EADDRINUSE, EBADF, EINVAL, ENOTSOCK, EADDRNOTAVAIL, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EROFS |
50 |
Oczekiwanie na połączenia na gnieździe (sys_listen) |
RDI = deskryptor gniazda RSI = maksymalna liczba połączeń oczekujących |
RAX = 0 RAX = błąd EADDRINUSE, EBADF, ENOTSOCK, EOPNOTSUPP |