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 |
---|---|---|---|---|
251 | - |
Funkcja systemowa sys_free_hugepages |
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał |
zawsze EAX = ENOSYS |
252 | 231 |
Zakończ wszystkie wątki procesu (sys_exit_group) |
EBX/RDI = status (kod wyjścia) |
nigdy nie powraca |
253* | 212 |
Pobierz ścieżkę wejścia do katalogu (sys_lookup_dcookie) |
EBX:ECX/RDI? = wartość opisująca wpis o katalogu EDX/RSI? = adres bufora, który otrzyma ścieżkę ESI/RDX? = długość tego bufora |
EAX = długość ścieżki EAX = błąd ENAMETOOLONG, EPERM, EINVAL, ENOMEM, ERANGE, EFAULT |
254 | 213 |
Utwórz deskryptor pliku epoll (sys_epoll_create) |
EBX/RDI = wstępna liczba deskryptorów |
EAX = nowy deskryptor pliku EAX = błąd ENOMEM |
255 | 233 |
Kontroluj deskryptor pliku epoll (sys_epoll_ctl) |
EBX/RDI = deskryptor epoll ECX/RSI = kod operacji EDX/RDX = deskryptor pliku ESI/R10 = adres struktury epoll_event |
EAX = 0 EAX = błąd ENOMEM, EBADF, EPERM, EINVAL |
256 | 232 |
Czekaj na deskryptorze pliku epoll (sys_epoll_wait) |
EBX/RDI = deskryptor epoll ECX/RSI = adres tablicy struktur epoll_event EDX/RDX = maksymalna liczba zdarzeń, na które będziemy czekać ESI/R10 = czas czekania w milisekundach (-1 = nieskończoność) |
EAX = liczba deskryptorów gotowych EAX = błąd EFAULT, EINTR, EBADF, EINVAL |
257 | 216 |
Przemapuj strony pamięci / stwórz nieliniowe mapowanie pliku (sys_remap_file_pages) |
EBX/RDI = początkowy adres stron pamięci ECX/RSI = rozmiar przemapowywanego obszaru pamięci EDX/RDX = 0 (już nieużywane, musi być 0) ESI/R10 = offset w pliku mierzony w jednostkach strony systemowej EDI/R8 = flagi (znaczenie takie, jak w sys_mmap, ale tu tylko MAP_NONBLOCK jest uznawane) |
EAX = 0 EAX = błąd EINVAL |
258 | 218 |
Utwórz wskaźnik do ID wątku (sys_set_tid_address) |
EBX/RDI = wskaźnik (adres), na którego wartość ma być ustawiona zmienna
clear_child_tid jądra |
EAX = PID bieżącego procesu |
259 | 222 |
Utwórz POSIX-owy licznik czasu (sys_timer_create) |
EBX/RDI = ID zegara, który będzie podstawą mierzenia czasu ECX/RSI = 0 lub adres struktury sigevent EDX/RDX = adres zmiennej trzymającej adres DWORDa, który otrzyma ID nowego zegara |
EAX = 0 EAX = błąd EAGAIN, EINVAL, ENOTSUPP |
260 | 223 |
Nastaw POSIX-owy licznik czasu (sys_timer_settime) |
EBX/RDI = ID zegara ECX/RSI = flagi (patrz: manual) EDX/RDX = adres struktury itimerspec ESI/R10 = adres struktury itimerspec |
EAX = 0 EAX = błąd EINVAL |
261 | 224 |
Pobierz pozostały czas na POSIX-owym liczniku czasu (sys_timer_gettime) |
EBX/RDI = ID zegara ECX/RSI = adres struktury itimerspec, która otrzyma wynik |
EAX = 0 EAX = błąd EINVAL |
262 | 225 |
Pobierz liczbę przekroczeń POSIX-owego licznika czasu (sys_timer_getoverrun) |
EBX/RDI = ID zegara |
EAX = liczba przekroczeń EAX = błąd EINVAL |
263 | 226 |
Usuń POSIX-owy licznik czasu (sys_timer_delete) |
EBX/RDI = ID zegara |
EAX = 0 EAX = błąd EINVAL |
264 | 227 |
Ustaw czas na danym zegarze (sys_clock_settime) |
EBX/RDI = ID zegara ECX/RSI = adres struktury timespec |
EAX = 0 EAX = błąd EINVAL, EFAULT, EINVAL |
265 | 228 |
Pobierz czas na danym zegarze (sys_clock_gettime) |
EBX/RDI = ID zegara ECX/RSI = adres struktury timespec |
EAX = 0 EAX = błąd EINVAL, EFAULT, EINVAL |
266 | 229 |
Pobierz precyzję danego zegara (sys_clock_getres) |
EBX/RDI = ID zegara ECX/RSI = adres struktury timespec |
EAX = 0 EAX = błąd EINVAL, EFAULT, EINVAL |
267 | 230 |
Przerwa w oparciu o dany zegar (sys_clock_nanosleep) |
EBX/RDI = ID zegara ECX/RSI = flagi (TIMER_ABSTIME=1) kontrolujące rodzaj czasu oczekiwania (względny lub nie) EDX/RDX = adres struktury timespec, która zawiera czas czekania ESI/R10 = adres struktury timespec (lub NULL), która otrzyma pozostały czas |
EAX = 0 EAX = błąd EINTR, EFAULT, ENOTSUPP |
268* | - |
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_statfs64) |
EBX/RDI = adres nazwy dowolnego pliku w zamontowanym systemie plików ECX/RSI adres struktury statfs64 |
EAX = 0 EAX = błąd |
269* | - |
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_fstatfs64) |
EBX/RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie plików ECX/RSI = adres struktury statfs64 |
EAX = 0 EAX = błąd |
270 | 200 |
Zabij pojedynczy wątek (sys_tgkill) |
EBX/RDI = GID grupy wątku (-1 daje to samo co sys_tkill) ECX/RSI = PID wątku EDX/RDX = numer sygnału do wysłania |
EAX = 0 EAX = błąd EINVAL, ESRCH, EPERM |
271 | 235 |
Zmień czas dostępu do pliku (sys_utimes) |
EBX/RDI = adres nazwy pliku (ASCIIZ) ECX/RSI = adres tablicy 2 struktur timeval, NULL gdy chcemy bieżący czas. Pierwsza struktura opisuje czas dostępu, druga - czas zmiany |
EAX = 0 EAX = błąd EACCES, ENOENT, EPERM, EROFS |
272 | 221 |
Zadeklaruj wzorce dostępu (sys_fadvise64_64) |
EBX/RDI = deskryptor pliku ECX/RSI = początek obszaru w pliku (offset) EDX/RDX = długość obszaru pliku ESI/R10 = wzorzec dostępu |
EAX = 0 EAX = błąd EBADF, ESPIPE, EINVAL |
273 | 236 |
sys_vserver |
niezaimplementowane w jądrach 2.4 |
zawsze EAX = ENOSYS |
274 | 237 |
Ustaw politykę dla zakresu pamięci (sys_mbind) |
EBX/RDI = adres początku obszaru ECX/RSI = długość obszaru EDX/RDX = polityka ESI/R10 = adres DWORDa zawierającego maskę bitową węzłów EDI/R8 = długość maski w bitach EBP/R9 = flagi polityki |
EAX = 0 EAX = błąd EFAULT, EINVAL, ENOMEM, EIO |
275 | 239 |
Pobierz politykę pamięci NUMA (sys_get_mempolicy) |
EBX/RDI = adres DWORDa, który otrzyma politykę ECX/RSI = NULL lub adres DWORDa, który otrzyma maskę węzłów EDX/RDX = maksymalna długość maski w bitach + 1 ESI/R10 = sprawdzany adres, jeśli potrzebny EDI/R8 = NULL lub MPOL_F_ADDR=2 (wtedy będzie zwrócona polityka dotycząca podanego adresu) |
EAX = 0 EAX = błąd |
276 | 238 |
Ustaw politykę pamięci NUMA (sys_set_mempolicy) |
EBX/RDI = polityka ECX/RSI = adres DWORDa zawierającego maskę bitową węzłów EDX/RDX = długość maski w bitach |
EAX = 0 EAX = błąd |
277 | 240 |
Otwórz kolejkę wiadomości (sys_mq_open) |
EBX/RDI = adres nazwy, która musi zaczynać się ukośnikiem ECX/RSI = flagi dostępu (EDX/RDX = tryb) (ESI/R10 = adres struktury mq_attr lub NULL) |
EAX = deskryptor kolejki EAX = błąd EACCES, EINVAL, EEXIST, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENOMEM, ENOSPC |
278 | 241 |
Usuń kolejkę wiadomości (sys_mq_unlink) |
EBX/RDI = adres nazwy, która musi zaczynać się ukośnikiem |
EAX = 0 EAX = błąd EACCES, ENAMETOOLONG, ENOENT |
279 | 242 |
Wyślij wiadomość do kolejki (sys_mq_timedsend) |
EBX/RDI = deskryptor kolejki ECX/RSI = adres napisu - treści wiadomości EDX/RDX = długość wiadomości ESI/R10 = priorytet (<=32768, wiadomości o większym numerze są przed tymi o mniejszym) EDI/R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia |
EAX = 0 EAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT |
280 | 243 |
Odbierz wiadomość z kolejki (sys_mq_timederceive) |
EBX/RDI = deskryptor kolejki ECX/RSI = adres bufora na treść wiadomości EDX/RDX = długość bufora ESI/R10 = NULL lub adres DWORDa, który otrzyma priorytet wiadomości EDI/R8 = adres struktury timespec, opisującej czas BEZWZGLĘDNY przedawnienia |
EAX = 0 EAX = błąd EAGAIN, EBADF, EINTR, EINVAL, EMSGSIZE, ETIMEOUT, EBADMSG |
281 | 244 |
Powiadamianie o wiadomościach (sys_mq_notify) |
EBX/RDI = deskryptor kolejki ECX/RSI = NULL (brak powiadomień) lub adres struktury sigevent |
EAX = 0 EAX = błąd EBADF, EBUSY, EINVAL, ENOMEM |
282 | 245 |
sys_mq_getsetattr |
NIE UŻYWAĆ Interfejs do mq_getattr, mq_setattr |
brak danych |
283 | 246 |
Załaduj nowe jądro do późniejszego uruchomienia (sys_kexec_load) |
EBX/RDI = fizyczny adres, gdzie załadować jądro ECX/RSI = liczba segmentów podanych w EDX/RDX EDX/RDX = adres tablicy struktur kexec_segment ESI/R10 = zORowane flagi |
EAX = 0 EAX = błąd EBUSY, EINVAL, EPERM |
284 | 247 |
Czekaj na zmianę stanu innego procesu (sys_waitid) |
EBX/RDI = typ identyfikatora (0=czekaj na dowolnego potomka, 1=czekaj na proces o danym PID,
2=czekaj na członka grupy o danym GID) ECX/RSI = identyfikator: PID lub GID (nieważny dla EBX/RDI=0) EDX/RDX = adres struktury siginfo ESI/R10 = opcje opisujące, na jakie zmiany czekamy |
EAX = 0, wypełniona struktura siginfo EAX = błąd ECHILD, EINTR, EINVAL |
285 | - |
sys_setaltroot |
nieużywane |
brak danych |
286 | 248 |
Dodanie klucza (sys_add_key) |
EBX/RDI = adres nazwy klucza do dodania ASCIIZ ECX/RSI = adres opisu klucza do dodania ASCIIZ EDX/RDX = adres danych klucza ESI/R10 = długość danych klucza w EDX/RDX EDI/R8 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór. |
EAX = numer dodanego klucza EAX = błąd EACCES, EINTR, EKEYEXPIRED, EKEYREVOKED, ENOMEM, ENOKEY, EINVAL |
287 | 249 |
Pobranie klucza (sys_request_key) |
EBX/RDI = adres nazwy klucza do pobrania ASCIIZ ECX/RSI = adres opisu klucza do pobrania ASCIIZ EDX/RDX = adres informacji służących do generowania klucza, gdy go nie znaleziono (ASCIIZ) ESI/R10 = identyfikator zbioru kluczy, do którego dodać znaleziony klucz. Można podać specjalny zbiór. |
EAX = numer znalezionego klucza EAX = błąd EACCES, EINTR, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOMEM, ENOKEY |
288 | 250 |
Zarządzanie kluczami (sys_keyctl) |
EBX/RDI = polecenie ECX/RSI, EDX/RDX, ... - dalsze parametry |
EAX = numer znalezionego klucza EAX = błąd EACCES, EDQUOT, EKEYEXPIRED, EKEYREJECTED, EKEYREVOKED, ENOKEY |
289 | 251 |
Ustaw priorytet kolejkowania We/wy procesu (sys_ioprio_set) |
EBX/RDI = typ ECX/RSI = informacja zależna od typu EDX/RDX = nowy priorytet |
EAX = 0 EAX = błąd ESRCH, EPERM, EINVAL |
290 | 252 |
Pobierz priorytet kolejkowania We/wy procesu (sys_ioprio_get) |
EBX/RDI = typ ECX/RSI = informacja zależna od typu |
EAX = priorytet EAX = błąd ESRCH, EPERM, EINVAL |
291 | 253 |
Inicjalizacja kolejki zdarzeń inotify (sys_inotify_init) |
nic |
EAX = deskryptor kolejki EAX = błąd EMFILE, ENOMEM |
292 | 254 |
Dodaj obiekt obserwowany kolejki zdarzeń inotify (sys_inotify_add_watch) |
EBX/RDI = deskryptor kolejki inotify ECX/RSI = adres nazwy pliku ASCIIZ EDX/RDX = flagi inotify |
EAX = deskryptor obserwacjidanego pliku EAX = błąd EACCES, EBADF, EFAULT, EINVAL, ENOMEM, ENOSPC |
293 | 255 |
Usuń obserwację obiektu z kolejki zdarzeń inotify (sys_inotify_rm_watch) |
EBX/RDI = deskryptor kolejki inotify ECX/RSI = deskryptor obserwacji |
EAX = 0 EAX = błąd EBADF, EINVAL |
294 | 256 |
Przenieś strony pamięci procesu (sys_migrate_pages) |
EBX/RDI = PID procesu, którego strony przenieść ECX/RSI = największy numer węzła +1 EDX/RDX = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi stare węzły ESI/R10 = adres tablicy DWORDów z co najmniej ECX/RSI bitami oznaczającymi nowe węzły |
EAX = 0 EAX = błąd EPERM, ESRCH |
295 | 257 |
Otwórz plik względnie do katalogu (sys_openat) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres nazwy pliku ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = bity dostępu ESI/R10 = prawa dostępu / tryb |
EAX = 0 EAX = błąd EBADF, ENOTDIR |
296 | 258 |
Utwórz katalog względnie do katalogu (sys_mkdirat) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = prawa dostępu / tryb |
EAX = 0 EAX = błąd - każdy związany z systemem plików lub prawami dostępu |
297 | 259 |
Utworzenie pliku specjalnego względnie do katalogu (sys_mknodat) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = typ urządzenia OR prawa dostępu ESI/R10, EDI/R8 - wynik działania (zmodyfikowanego) makra makedev |
EAX = 0 EAX = błąd EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS |
298 | 260 |
Zmiana właściciela obiektu położonego względnie do katalogu (sys_fchownat) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = identyfikator UID nowego właściciela obiektu ESI/R10 = identyfikator GID grupy, która stanie się właścicielem obiektu EDI/R8 = 0 lub wartość AT_SYMLINK_NOFOLLOW=100h, wtedy nie będzie podążał za dowiązaniami symbolicznymi |
EAX = 0 EAX = błąd EBADF, ENOTDIR, EINVAL |
299 | 261 |
Zmiana czasów dostępu i zmian pliku położonego względnie do katalogu (sys_futimesat) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = adres tablicy 2 struktur timeval, NULL gdy chcemy bieżący czas. Pierwsza struktura opisuje czas dostępu, druga - czas zmiany |
EAX = 0 EAX = błąd EBADF, ENOTDIR |
300 | 262 |
Pobierz status obiektu położonego względnie do katalogu (sys_fstatat64) |
EBX/RDI = deskryptor otwartego katalogu lub wartość AT_FDCWD=-100
oznaczająca katalog bieżący ECX/RSI = adres ścieżki/nazwy ASCIIZ. Jeśli ścieżka jest względna, jest brana jako względna względem podanego katalogu zamiast bieżącego katalogu procesu EDX/RDX = adres struktury stat na dane ESI/R10 = 0 lub AT_SYMLINK_NOFOLLOW (=0x100), gdy nie chcemy dereferencjonować dowiązań |
EAX = 0 EAX = błąd EBADF, ENOTDIR, EINVAL, błędy sys_stat |