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 |
---|---|---|---|---|
201 | - |
Pobierz efektywne ID użytkownika bieżącego procesu (sys_geteuid32) |
nic |
EAX = efektywny UID |
202 | - |
Pobierz efektywne ID grupy bieżącego procesu (sys_getegid32) |
nic |
EAX = efektywny GID |
203 | - |
Ustaw realny i efektywny ID użytkownika (sys_setreuid32) |
EBX/RDI = realny ID użytkownika (UID) ECX/RSI = efektywny UID |
EAX = 0 EAX = błąd EPERM |
204 | - |
Ustaw realny i efektywny ID grupy (sys_setregid32) |
EBX/RDI = realny ID grupy (GID) ECX/RSI = efektywny GID |
EAX = 0 EAX = błąd EPERM |
205 | - |
Pobierz liczbę dodatkowych grup (sys_getgroups32) |
EBX/RDI = rozmiar tablicy z ECX/RSI ECX/RSI = adres tablicy, gdzie zostaną zapisane GID-y (DWORDY) grup dodatkowych |
EAX = liczba dodatkowych grup procesu EAX = błąd EFAULT, EINVAL, EPERM |
206 | - |
Ustaw liczbę dodatkowych grup (sys_setgroups32) |
EBX/RDI = rozmiar tablicy z ECX/RSI ECX/RSI = adres tablicy, gdzie zawierającą GID-y (DWORDY) |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
207 | - |
Zmiana właściciela (sys_fchown32) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = nowy numer użytkownika EDX/RDX = nowy numer grupy |
EAX = 0 EAX = błąd |
208 | - |
Ustaw różne ID użytkownika (sys_setresuid32) |
EBX/RDI = realny UID lub -1 (wtedy jest bez zmian) ECX/RSI = efektywny UID lub -1 (bez zmian) EDX/RDX = zachowany (saved) UID lub -1 (bez zmian) |
EAX = 0 EAX = błąd EPERM |
209 | - |
Pobierz różne ID użytkownika (sys_getresuid32) |
EBX/RDI = adres DWORDa, który otrzyma realny UID ECX/RSI = adres DWORDa, który otrzyma efektywny UID EDX/RDX = adres DWORDa, który otrzyma zachowany UID |
EAX = 0 EAX = błąd EFAULT |
210 | - |
Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid32) |
EBX/RDI = realny GID ECX/RSI = efektywny GID EDX/RDX = zachowany (saved) GID |
EAX = 0 EAX = błąd EPERM |
211 | - |
Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid32) |
EBX/RDI = adres DWORDa, który otrzyma realny GID ECX/RSI = adres DWORDa, który otrzyma efektywny GID EDX/RDX = adres DWORDa, który otrzyma zachowany (saved) GID |
EAX = 0 EAX = błąd EFAULT |
212 | - |
Zmiana właściciela pliku (sys_chown32) |
EBX/RDI=adres ścieżki do pliku ECX/RSI = UID nowego właściciela EDX/RDX = GID nowej grupy |
EAX = 0 EAX = błąd na przykład EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP |
213 | - |
Ustaw identyfikator użytkownika (sys_setuid32) |
EBX/RDI = nowy UID |
EAX = 0 EAX = błąd EPERM |
214 | - |
Ustaw ID grupy bieżącego procesu (sys_setgid32) |
EBX/RDI = nowy ID grupy |
EAX = 0 EAX = błąd EPERM |
215 | - |
Ustal UID przy sprawdzaniu systemów plików (sys_setfsuid32) |
EBX/RDI = nowy ID użytkownika |
EAX = stary UID (zawsze) |
216 | - |
Ustal GID przy sprawdzaniu systemów plików (sys_setfsgid32) |
EBX/RDI = nowy ID grupy |
EAX = stary GID (zawsze) |
217 | 155 |
Zmień główny system plików/katalog (sys_pivot_root) |
EBX/RDI = adres łańcucha znaków - nowy główny katalog bieżącego procesu ECX/RSI = adres łańcucha znaków - otrzyma stary główny katalog bieżącego procesu |
EAX = 0 EAX = błąd EBUSY, EINVAL, EPERM, ENOTDIR + błędy sys_stat |
218 | 27 |
Pobierz informację, czy strony pamięci są w rdzeniu procesu (sys_mincore) |
EBX/RDI = adres początkowy sprawdzanych bajtów ECX/RSI = liczba sprawdzanych bajtów EDX/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) |
EAX = 0 EAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM |
219 | 28 |
Porada dla jądra o użyciu pamięci (sys_madvise, sys_madvise1) |
EBX/RDI = adres początkowy bajtów, których dotoczy porada ECX/RSI = liczba tych bajtów EDX/RDX = porada |
EAX = 0 EAX = błąd EAGAIN, EINVAL, EFAULT, ENOMEM |
220 | 217 |
Pobierz wpisy o katalogach, wersja 64-bitowa (sys_getdents64) |
EBX/RDI = deskryptor otwartego katalogu ECX/RSI = adres obszaru pamięci na struktury dirent EDX/RDX = rozmiar obszaru pamięci pod [ECX/RSI] |
EAX = 0 EAX = błąd EBADF, EFAULT, EINVAL, ENOENT, ENOTDIR |
221 | - |
Kontrola nad deskryptorem pliku, wersja 64-bitowa (sys_fcntl64) |
EBX/RDI = deskryptor pliku ECX/RSI = kod komendy EDX/RDX zależy od komendy |
EAX zależy od komendy EAX = błąd EACCES, EAGAIN, EBADF, EDEADLK, EFAULT, EINTR, EINVAL, EMFILE, ENOLOCK, EPERM |
222 | - |
brak danych |
- |
- |
223 | 185 |
Funkcja systemowa sys_security |
niezaimplementowane w jądrach 2.4 |
zawsze EAX = ENOSYS |
224 | 186 |
Pobierz identyfikator wątku (sys_gettid) |
nic |
EAX = id wątku |
225 | 187 |
Czytaj kilka stron pliku z wyprzedzeniem do pamięci podręcznej (sys_readahead) |
EBX/RDI = deskryptor pliku ECX/RSI = miejsce w pliku, od którego zacząć EDX/RDX = liczba bajtów do przeczytania |
EAX = EBADF, gdy błąd |
226 | 188 |
Ustaw wartość atrybutu rozszerzonego (sys_setxattr) |
EBX/RDI = adres ścieżki pliku ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu EDI/R8 = flaga (1=utwórz, 2=zamień) |
EAX = 0 EAX = błąd |
227 | 189 |
Ustaw wartość atrybutu rozszerzonego (sys_lsetxattr) |
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu EDI/R8 = flaga (1=utwórz, 2=zamień) |
EAX = 0 EAX = błąd |
228 | 190 |
Ustaw wartość atrybutu rozszerzonego (sys_fsetxattr) |
EBX/RDI = deskryptor pliku ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu EDI/R8 = flaga (1=utwórz, 2=zamień) |
EAX = 0 EAX = błąd |
229 | 191 |
Pobierz wartość atrybutu rozszerzonego (sys_getxattr) |
EBX/RDI = adres ścieżki pliku ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu |
EAX = 0 EAX = błąd |
230 | 192 |
Pobierz wartość atrybutu rozszerzonego (sys_lgetxattr) |
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu |
EAX = 0 EAX = błąd |
231 | 193 |
Pobierz wartość atrybutu rozszerzonego (sys_fgetxattr) |
EBX/RDI = deskryptor pliku ECX/RSI = adres nazwy atrybutu EDX/RDX = wartość atrybutu ESI/R10 = długość atrybutu |
EAX = 0 EAX = błąd |
232 | 194 |
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_listxattr) |
EBX/RDI = adres ścieżki pliku ECX/RSI = adres tablicy na nazwy EDX/RDX = długość tablicy |
EAX = 0 EAX = błąd |
233 | 195 |
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_llistxattr) |
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi ECX/RSI = adres tablicy na nazwy EDX/RDX = długość tablicy |
EAX = 0 EAX = błąd |
234 | 196 |
Pobierz listę nazw atrybutów rozszerzonych pliku (sys_flistxattr) |
EBX/RDI = deskryptor pliku ECX/RSI = adres tablicy na nazwy EDX/RDX = długość tablicy |
EAX = 0 EAX = błąd |
235 | 197 |
Usuń atrybut rozszerzony pliku (sys_removexattr) |
EBX/RDI = adres ścieżki pliku ECX/RSI = adres nazwy atrybutu do usunięcia |
EAX = 0 EAX = błąd |
236 | 198 |
Usuń atrybut rozszerzony pliku (sys_lremovexattr) |
EBX/RDI = adres ścieżki pliku, funkcja nie podąża za dowiązaniami symbolicznymi ECX/RSI = adres nazwy atrybutu do usunięcia |
EAX = 0 EAX = błąd |
237 | 199 |
Usuń atrybut rozszerzony pliku (sys_fremovexattr) |
EBX/RDI = deskryptor pliku ECX/RSI = adres nazwy atrybutu do usunięcia |
EAX = 0 EAX = błąd |
238 | 200 |
Zabij pojedyncze zadanie (sys_tkill) |
EBX/RDI = PID zadania (niekoniecznie całego procesu) ECX/RSI = numer sygnału do wysłania |
EAX = 0 EAX = błąd EINVAL, ESRCH, EPERM |
239 | 40 |
Kopiuj dane między deskryptorami plików (sys_sendfile64) |
EBX/RDI = deskryptor pliku wyjściowego, otwartego do zapisu ECX/RSI = deskryptor pliku wejściowego EDX/RDX = adres 64-bitowej zmiennej - numeru bajtu w pliku źródłowym, od którego zacząć kopiować ESI/R10 = liczba bajtów do skopiowania |
EAX = liczba zapisanych bajtów EAX = błąd EBADF, EAGAIN, EINVAL, ENOMEM, EIO, EFAULT |
240 | 202 |
Szybka funkcja blokowania (sys_futex) |
EBX/RDI = sprawdzany adres ECX/RSI = operacja EDX/RDX = wartość ESI/R10 = adres struktury timespec (czas oczekiwania) lub 0 |
EAX zależy od operacji EAX = błąd EINVAL, EFAULT |
241 | 203 |
Ustaw maskę procesorów dla procesu (sys_sched_setaffinity) |
EBX/RDI = PID procesu, którego maskę ustawiamy (0=bieżący) ECX/RSI = długość maski pod [EDX/RDX] EDX/RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym itp... |
EAX = 0 EAX = błąd EINVAL, EFAULT, ESRCH, EPERM |
242 | 204 |
Pobierz maskę procesorów dla procesu (sys_sched_getaffinity) |
EBX/RDI = PID procesu, którego maskę pobieramy (0=bieżący) ECX/RSI = długość maski pod [EDX/RDX] EDX/RDX = adres maski bitowej. Najmłodszy bit maski oznacza, czy proces może być wykonany na pierwszym procesorze logicznym itp... |
EAX = 0 EAX = błąd EINVAL, EFAULT, ESRCH, EPERM |
243 | 205 |
Ustaw wpis w obszarze lokalnym wątku TLS (sys_set_thread_area) |
EBX/RDI = adres struktury user_desc |
EAX = 0 EAX = EINVAL, EFAULT, ESRCH |
244 | 211 |
Pobierz wpis w obszarze lokalnym wątku TLS (sys_get_thread_area) |
EBX/RDI = adres struktury user_desc |
EAX = 0 EAX = błąd EINVAL, EFAULT |
245 | 206 |
Utwórz asynchroniczny kontekst we/wy (sys_io_setup) |
EBX/RDI = liczba zdarzeń, które kontekst może otrzymać ECX/RSI = adres DWORDa (o wartości zero), który otrzyma uchwyt do nowego kontekstu |
EAX = 0 EAX = błąd EINVAL, EFAULT, ENOSYS, ENOMEM, EAGAIN |
246 | 207 |
Zniszcz asynchroniczny kontekst we/wy (sys_io_destroy) |
EBX/RDI = uchwyt do usuwanego kontekstu |
EAX = 0 EAX = błąd EINVAL, EFAULT, ENOSYS |
247 | 208 |
Pobierz zdarzenia we/wy (sys_io_getevents) |
EBX/RDI = uchwyt do kontekstu ECX/RSI = minimalna liczba zdarzeń do pobrania EDX/RDX = maksymalna liczba zdarzeń do pobrania ESI/R10 = adres tablicy struktur io_event EDI/R8 = adres struktury timespec (czas oczekiwania) lub 0 |
EAX = liczba odczytanych zdarzeń EAX = błąd EINVAL, EFAULT, ENOSYS |
248 | 209 |
Wyślij zdarzenia we/wy do przetworzenia (sys_io_submit) |
EBX/RDI = uchwyt do kontekstu ECX/RSI = liczba adresów struktur pod [EDX/RDX] EDX/RDX = adres tablicy adresów struktur iocb opisujących zdarzenia do przetworzenia |
EAX = liczba wysłanych bloków we/wy EAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN |
249 | 210 |
Przerwij operację we/wy (sys_io_cancel) |
EBX/RDI = uchwyt do kontekstu ECX/RSI = adres struktury iocb, opisującej operację do przerwania EDX/RDX = adres struktury io_event, która otrzyma przerwane działanie |
EAX = 0 EAX = błąd EINVAL, EFAULT, ENOSYS, EBADF, EAGAIN |
250 | - |
Funkcja systemowa sys_alloc_hugepages |
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał |
zawsze EAX = ENOSYS |