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 |
---|---|---|---|---|
151 | 150 |
Odblokowanie stron pamięci (sys_munlock) |
EBX/RDI = adres obszaru pamięci (wyrównany do wielokrotności rozmiaru strony pamięci) ECX/RSI = długość obszaru pamięci |
EAX = 0 EAX = błąd EINVAL, ENOMEM |
152 | 151 |
Zablokowanie całej pamięci procesu (sys_mlockall) |
EBX/RDI = flagi blokowania pamięci |
EAX = 0 EAX = błąd EINVAL, ENOMEM, EAGAIN, EPERM |
153 | 152 |
Odblokowanie całej pamięci procesu (sys_munlockall) |
nic |
EAX = 0 EAX = błąd. |
154 | 142 |
Ustaw parametry szeregowania zadań (sys_sched_setparam) |
EBX/RDI = PID procesu ECX/RSI = adres struktury sched_param, zawierającej dane |
EAX = 0 EAX = błąd EINVAL, ESRCH, EPERM |
155 | 143 |
Pobierz parametry szeregowania zadań (sys_sched_getparam) |
EBX/RDI = PID procesu ECX/RSI = adres struktury sched_param, która otrzyma wynik |
EAX = 0 EAX = błąd EINVAL, ESRCH, EPERM |
156 | 144 |
Ustaw parametry/algorytm szeregowania zadań (sys_sched_setsheduler) |
EBX/RDI = PID procesu ECX/RSI = polityka ECX/RSI = adres struktury sched_param, zawierającej dane |
EAX = 0 EAX = błąd EINVAL, ESRCH, EPERM |
157 | 145 |
Pobierz parametry/algorytm szeregowania zadań (sys_sched_getsheduler) |
EBX/RDI = PID procesu |
EAX = polityka EAX = błąd EINVAL, ESRCH, EPERM |
158 | 24 |
Oddanie procesora innym procesom (sys_sched_yield) |
nic |
EAX = 0 EAX = błąd. |
159 | 146 |
Pobierz maksymalny priorytet statyczny (sys_sched_get_priority_max) |
EBX/RDI = polityka |
EAX = maksymalny priorytet dla tej polityki EAX = błąd EINVAL |
160 | 147 |
Pobierz minimalny priorytet statyczny (sys_sched_get_priority_min) |
EBX/RDI = polityka |
EAX = minimalny priorytet dla tej polityki EAX = błąd EINVAL |
161 | 148 |
Pobierz długość czasu w szeregowaniu cyklicznym (sys_sched_rr_get_interval) |
EBX/RDI = PID procesu (0 = ten proces) ECX/RSI = adres struktury timeval, która otrzyma wynik |
EAX = 0 EAX = błąd ESRCH, ENOSYS |
162 | 35 |
Pauza w wykonywaniu programu (sys_nanosleep) |
EBX/RDI = adres struktury timespec ECX/RSI = NULL lub adres modyfikowalnej struktury timespec, która otrzyma resztkę czasu, która została |
EAX = 0 EAX = sygnał lub błąd EINTR, EINVAL |
163 | 25 |
Przemapuj adres wirtualny (sys_mremap) |
EBX/RDI = stary adres ECX/RSI = rozmiar obszaru do przemapowania EDX/RDX = żądany rozmiar ESI/R10 = zero lub flagi przemapowania EDI/R8 = nowy adres, jeśli dano flagę MREMAP_FIXED |
EAX = wskaźnik do nowego obszaru EAX = sygnał lub błąd EFAULT, EAGAIN, ENOMEM, EINVAL |
164 | 117 |
Ustaw różne ID użytkownika (sys_setresuid) |
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 |
165 | 118 |
Pobierz różne ID użytkownika (sys_getresuid) |
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 |
166 | - |
Uruchom tryb wirtualny 8086 (sys_vm86) |
EBX/RDI = kod funkcji ECX/RSI = adres struktury vm86plus_struct |
(zależy od numeru funkcji) EAX = błąd EFAULT |
167 | 178 |
Zapytaj o moduł (sys_query_module) |
EBX/RDI = adres nazwy modułu lub NULL (jądro) ECX/RSI = numer podfunkcji EDX/RDX = adres bufora ESI/R10 = rozmiar bufora EDI/R8 = adres DWORDa |
EAX = 0 EAX = błąd EFAULT, ENOSPC, EINVAL, ENOENT |
168 | 7 |
Czekaj na zdarzenia na deskryptorze (sys_poll) |
EBX/RDI = adres tablicy struktur pollfd ECX/RSI = liczba struktur pollfd w tablicy EDX/RDX = max. czas na oczekiwanie w milisekundach (-1 = nieskończoność) |
EAX = liczba odpowiednich deskryptorów EAX = 0, gdy czas upłynął EAX = błąd EFAULT, EINTR, EINVAL |
169 | 180 |
Interfejs demona NFS (sys_nfsservctl) |
EBX/RDI = komenda ECX/RSI = adres struktury nfsctl_arg EDX/RDX = adres unii union nfsctl_res |
EAX = 0 EAX = błąd |
170 | 119 |
Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid) |
EBX/RDI = realny GID ECX/RSI = efektywny GID EDX/RDX = zachowany (saved) GID |
EAX = 0 EAX = błąd EPERM |
171 | 120 |
Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid) |
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 |
172 | 157 |
Działania na procesie (sys_prctl) |
EBX/RDI = opcja ECX/RSI, EDX/RDX, ESI/R10, EDI/R8 = argumenty |
EAX = 0 lub 1 EAX = błąd EINVAL |
173 | 15 |
Powrót z procedury obsługi sygnału (sys_rt_sigreturn) |
-- funkcja wewnętrzna, nie używać-- EBX/RDI = parametr zależny od architektury |
nigdy nie powraca |
174 | 13 |
Pobierz i zmień procedurę obsługi sygnału (sys_rt_sigaction) |
EBX/RDI = numer sygnału ECX/RSI = adres struktury sigaction opisującą bieżącą procedurę EDX/RDX = adres struktury sigaction opisującą starą procedurę ESI/R10 = rozmiar struktury sigset_t |
EAX = 0 EAX=błąd EINVAL, EINTR, EFAULT |
175 | 14 |
Pobierz i zmień blokowane sygnały (sys_rt_sigprocmask) |
EBX/RDI = działanie ECX/RSI = adres zestawu sygnałów (tablicy 32 DWORDów) EDX/RDX = adres zestawu sygnałów, który otrzyma starą maskę sygnałów ESI/R10 = rozmiar struktury sigset_t |
EAX = 0 EAX=błąd EINVAL |
176 | 127 |
Pobierz sygnały oczekujące (sys_rt_sigpending) |
EBX/RDI = adres zestawu sygnałów, który otrzyma oczekujące sygnały ECX/RSI = rozmiar struktury sigset_t |
EAX = 0 EAX=błąd EFAULT |
177 | 128 |
Synchronicznie czekaj na zakolejkowane sygnały (sys_rt_sigtimedwait) |
EBX/RDI = adres zestawu sygnałów, na które czekać ECX/RSI = adres struktury siginfo, która otrzyma informację o sygnale EDX/RDX = adres struktury timespec określającej czas oczekiwania ESI/R10 = rozmiar struktury sigset_t |
EAX = numer sygnału EAX=błąd EINVAL, EINTR, EAGAIN |
178 | 129 |
Zakolejkuj sygnał dla procesu (sys_rt_sigqueueinfo) |
EBX/RDI=PID procesu, który ma otrzymać sygnał ECX/RSI=numer sygnału EDX/RDX=adres struktury siginfo_t do wysłania procesowi razem z sygnałem |
EAX = 0 EAX=błąd EAGAIN, EINVAL, EPERM, ESRCH |
179 | 130 |
Czekaj na sygnał (sys_rt_sigsuspend) |
EBX/RDI = adres zestawu sygnałów, na które czekać ECX/RSI = rozmiar struktury sigset_t |
EAX = -1 EAX=błąd EINTR, EFAULT |
180 | 17 |
Czytaj z danej pozycji w pliku (sys_pread/sys_pread64) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = adres bufora, który otrzyma dane EDX/RDX = liczba bajtów do odczytania ESI/R10 = pozycja, z której zacząć czytanie |
EAX = liczba przeczytanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian) EAX = błąd (jak w sys_read) |
181 | 18 |
Zapisuj na danej pozycji w pliku (sys_pwrite/sys_pwrite64) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = adres bufora, z którego pobierać dane do zapisania EDX/RDX = liczba bajtów do zapisania ESI/R10 = pozycja, od której zacząć zapisywanie |
EAX = liczba zapisanych bajtów (wskaźnik pozycji w pliku pozostaje bez zmian) EAX = błąd (jak w sys_read) |
182 | 92 |
Zmiana właściciela pliku (sys_chown) |
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 |
183 | 79 |
Pobierz bieżący katalog roboczy (sys_getcwd) |
EBX/RDI = adres bufora, który otrzyma ścieżkę ECX/RSI = długość tego bufora |
EAX = EBX/RDI EAX=NULL, gdy błąd ERANGE, EACCES, EFAULT, EINVAL, ENOENT |
184 | 125 |
Pobierz możliwości procesu (sys_capget) |
EBX/RDI = adres struktury cap_user_header_t ECX/RSI = adres struktury cap_user_data_t |
EAX = EBX/RDI EAX=NULL, gdy błąd EPERM, EINVAL |
185 | 126 |
Ustaw możliwości procesu (sys_capset) |
EBX/RDI = adres struktury cap_user_header_t ECX/RSI = adres struktury cap_user_data_t |
EAX = EBX/RDI EAX=NULL, gdy błąd EPERM, EINVAL |
186 | 131 |
Ustaw alternatywny stos dla procedur obsługi sygnałów (sys_sigaltstack) |
EBX/RDI = adres struktury stack_t, opisującej nowy stos ECX/RSI = adres struktury stack_t, opisującej stary stos; lub NULL (ewentualnie EDX/RDX = adres nowego wierzchołka stosu) |
EAX = 0 EAX = błąd EPERM, EINVAL, ENOMEM |
187 | 40 |
Kopiuj dane między deskryptorami plików (sys_sendfile) |
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 |
188 | 181 |
Funkcja systemowa sys_getpmsg |
niezaimplementowane w jądrach 2.4, na systemach 64-bitowych zarezerwowane dla LiS/STREAMS |
zawsze EAX = ENOSYS |
189 | 182 |
Funkcja systemowa sys_putpmsg |
niezaimplementowane w jądrach 2.4, na systemach 64-bitowych zarezerwowane dla LiS/STREAMS |
zawsze EAX = ENOSYS |
190 | 58 |
Utwórz proces potomny i zablokuj rodzica (sys_vfork) |
nic |
EAX = PID procesu potomnego EAX = błąd EAGAIN, ENOMEM |
191 | - |
Pobierz limity zasobów (sys_ugetrlimit) |
patrz: sys_getrlimit (?) |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
192 | - |
Mapuj urządzenie lub plik do pamięci (sys_mmap2) |
EBX/RDI = proponowany adres początkowy ECX/RSI = liczba bajtów pliku do zmapowania EDX/RDX = ochrona ESI/R10 = flagi mapowania EDI/R8 = deskryptor mapowanego pliku, jeśli mapowanie nie jest anonimowe EBP/R9 = offset początku mapowanych danych w pliku, liczony w jednostkach wielkości strony systemowej zamiast w bajtach |
EAX = adres zmapowanego obszaru EAX = błąd (takie same jak w sys_mmap + EFAULT) |
193 | - |
Skróć plik, wersja 64-bitowa (sys_truncate64) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD) EDX/RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD) |
EAX = 0 EAX = błąd |
194 | - |
Skróć plik, wersja 64-bitowa (sys_ftruncate64) |
EBX/RDI = deskryptor pliku otwartego do zapisu ECX/RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD) EDX/RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD) |
EAX = 0 EAX = błąd |
195 | - |
Pobierz status pliku, wersja 64-bitowa (sys_stat64) |
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest
status obiektu docelowego. ECX/RSI = adres struktury stat64 |
EAX = 0 EAX = błąd |
196 | - |
Pobierz status pliku, wersja 64-bitowa (sys_lstat64) |
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany
jest status linku, a nie obiektu docelowego. ECX/RSI = adres struktury stat64 |
EAX = 0 EAX = błąd |
197 | - |
Pobierz status pliku, wersja 64-bitowa (sys_fstat64) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = adres struktury stat64 |
EAX = 0 EAX = błąd |
198 | - |
Zmiana właściciela (sys_lchown32) |
EBX/RDI = adres nazwy pliku/katalogu ASCIIZ ECX/RSI = nowy numer użytkownika EDX/RDX = nowy numer grupy |
EAX = 0 EAX = błąd EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EACCES, ELOOP i inne |
199 | - |
Pobierz identyfikator użytkownika (sys_getuid32) |
nic |
EAX = numer UID |
200 | - |
Pobierz ID grupy bieżącego procesu (sys_getgid32) |
nic |
EAX = ID grupy |