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).
Najaktualniejsze informacje o funkcjach systemowych można znaleźć zazwyczaj w sekcji 2 (lub 3) manuala, na przykład man 2 open
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 |
|---|---|---|---|
| - |
Czekaj na zmianę stanu innego procesu (sys_waitpid) |
RDI = id procesu / specyfikacja RSI = NULL lub adres zmiennej DWORD, która otrzyma status RDX = opcje |
RAX=PID zakończonego procesu [RSI] = (jeśli podano adres bufora) stan wyjścia procesu RAX = błąd ECHILD, EINVAL, ERESTARTSYS |
| - |
Funkcja systemowa sys_break (porzucone) |
Istnieje tylko dla zachowania zgodności |
RAX = błąd ENOSYS |
| - |
Funkcja systemowa sys_oldstat (porzucone) |
|
|
| - |
Odmontowanie systemu plików (sys_umount) |
RDI = adres nazwy pliku specjalnego lub katalogu (zamontowanego) |
nic RAX = błąd - każdy, który może się zdarzyć w systemie plików lub jądrze |
| - |
Ustaw czas systemowy (sys_stime) |
RDI = nowy czas jako liczba sekund, które upłynęły od 1 Stycznia 1970 |
nic RAX = błąd EPERM |
| - |
Funkcja systemowa sys_oldfstat (porzucone) |
|
|
| - |
Funkcja systemowa sys_stty (porzucone) |
--nieużywane od 2.0-- |
zawsze RAX = -1 |
| - |
Funkcja systemowa sys_gtty (porzucone) |
--nieużywane od 2.0-- |
zawsze RAX = -1 |
| - |
Zmień priorytet procesu (sys_nice) |
RDI = liczba, o którą zwiększyć numer priorytetu (czyli zmniejszyć sam priorytet) |
nic RAX = błąd EPERM |
| - |
Pobierz bieżącą datę i czas - sys_ftime (przestarzałe) |
--zamiast tego, używaj time, gettimeofday-- RDI = adres struktury timeb |
zawsze RAX = 0 |
| - |
Funkcja systemowa sys_prof (porzucone) |
niezaimplementowane w jądrach 2.4 |
zawsze RAX = -1, błąd ENOSYS |
| - |
Ustaw procedurę obsługi sygnału (sys_signal) |
RDI = numer sygnału RSI = adres procedury przyjmującej int i zwracającą void (nic)
lub wartość SIG_IGN=1 (ignoruj sygnał) lub SIG_DFL=0 (resetuj sygnał na domyślne zachowanie)
|
RAX = adres poprzedniej procedury obsługi RAX = błąd SIG_ERR |
| - |
Funkcja systemowa sys_lock (porzucone) |
--nieużywane od 2.0-- |
zawsze RAX = -1 |
| - |
Funkcja systemowa sys_mpx (porzucone) |
--nieużywane od 2.0-- |
zawsze RAX = -1 |
| - |
Pobierz/ustaw limity zasobów (sys_ulimit) |
--nieużywane (zamiast tego używaj getrlimit, setrlimit, sysconf)-- man 3 ulimit RDI = komenda, patrz: sys_ulimit RSI = nowy limit | RAX = aktualny limit RAX = -1, gdy błąd |
| - |
Funkcja systemowa sys_oldolduname (porzucone) |
|
|
| - |
Pobierz/ustal procedurę obsługi sygnału (sys_sigaction) |
RDI = numer sygnału RSI = adres struktury sigaction opisującą bieżącą procedurę RDX = adres struktury sigaction opisującą starą procedurę |
nic RAX=błąd EINVAL, EINTR, EFAULT |
| - |
Pobierz maskę sygnałów procesu (sys_sgetmask) |
--przestarzałe (zamiast tego używaj sys_sigprocmask)-- |
RAX = maska sygnałów bieżącego procesu |
| - |
Ustaw maskę sygnałów procesu (sys_ssetmask) |
--przestarzałe (zamiast tego używaj sys_sigprocmask)-- RDI = nowa maska sygnałów procesu |
RAX = poprzednia maska sygnałów |
| - |
Zastąpienie dla sigpause - sys_sigsuspend |
RDI = adres nowej maski sygnałowej procesu - struktury sigset_t |
RAX = 0 RAX = -1, gdy błąd |
| - |
Pobierz trwające blokujące sygnały (sys_sigpending) |
RDI = adres maski sygnałów - struktury sigset_t |
RAX = 0 RAX = -1, gdy błąd |
| - |
Czytaj katalog (sys_readdir) |
RDI = deskryptor otwartego katalogu RSI = adres struktury dirent RDX = liczba struktur do odczytania (ignorowane, czytana jest 1 struktura) |
RAX = 1 RAX = 0 na końcu katalogu RAX = -1, gdy błąd |
| - |
Profilowanie czasu wykonywania (sys_profil) |
--man 3 profil-- RDI = adres tablicy WORDów RSI = długość tej tablicy, na którą pokazuje RDI RDX = offset początkowy R10 = mnożnik |
zawsze RAX = 0 |
| - |
Funkcja systemowa sys_olduname (porzucone) |
|
|
| - |
Spowoduj bezczynność procesu 0 (sys_idle) |
nic |
dla procesu nr 0 nigdy nie wraca. Dla pozostałych zwraca RAX = -1 (EPERM) |
| - |
Przejdź w tryb wirtualny 8086 (sys_vm86old) |
--to było przed jądrem 2.0.38-- RDI = adres struktury vm86_struct |
RAX = 0 RAX = -1, gdy błąd |
| - |
Komunikacja międzyprocesowa SysV (sys_ipc) |
RDI = numer wywoływanej funkcji RSI, RDX, R10 = parametry 1-3 wywoływanej funkcji R8 = adres dalszych parametrów, jeśli trzeba R9 = parametr piąty |
zależy od wywoływanej funkcji |
| - |
Powrót z procedury obsługi sygnału (sys_sigreturn) |
RDI = argument zależny od architektury, używany przez jądro |
nigdy nie powraca |
| - |
Zmiana listy blokowanych sygnałów (sys_sigprocmask) |
RDI = co zrobić RSI = adres struktury sigset_t RDX = adres struktury sigset_t (do przechowania starej maski) lub 0 |
RAX = 0 RAX = -1, gdy błąd EINVAL, EPERM, EFAULT |
| - |
Demon wypróżniania buforów (sys_bdflush) |
RDI = komenda demona RSI = dodatkowy parametr, zależny od komendy |
RAX=0, gdy sukces i RDI>0 RAX = -1, gdy błąd EPERM, EFAULT, EBUSY, EINVAL |
| - |
Zmiana bieżącej pozycji w dużym pliku (sys_llseek) |
RDI = deskryptor otwartego pliku ECX:RSI = liczba bajtów, o którą chcemy się przesunąć RDX = adres QWORDa, który otrzyma nową pozycję w pliku (big endian?) R10 = odkąd zaczynamy ruch |
RAX = 0 RAX = błąd EBADF, EINVAL |
| - |
Oczekiwanie zmiany stanu deskryptora(ów) (sys_newselect) |
RDI = najwyższy numer spośród deskryptorów + 1 (co najwyżej FILE_MAX) RSI = adres tablicy deskryptorów (lub 0) sprawdzanych, czy można z nich czytać RDX = adres tablicy deskryptorów (lub 0) sprawdzanych, czy można do nich pisać R10 = adres tablicy deskryptorów (lub 0) 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 = -1, gdy wystąpił błąd EBADF, EINVAL, ENOMEM, EINTR |
| - |
Uruchom tryb wirtualny 8086 (sys_vm86) |
RDI = kod funkcji RSI = adres struktury vm86plus_struct |
(zależy od numeru funkcji) RAX = -1, gdy błąd EFAULT |
| - |
Pobierz limity zasobów (sys_ugetrlimit) |
patrz: sys_getrlimit (?) |
nic RAX = błąd EFAULT, EINVAL, EPERM |
| - |
Mapuj urządzenie lub plik do pamięci (sys_mmap2) |
RDI = proponowany adres początkowy RSI = liczba bajtów pliku do zmapowania RDX = ochrona R10 = flagi mapowania R8 = deskryptor mapowanego pliku, jeśli mapowanie nie jest anonimowe R9 = offset początku mapowanych danych w pliku, liczony w jednostkach wielkości strony systemowej zamiast w bajtach |
RAX = adres zmapowanego obszaru RAX = -1, gdy błąd (takie same jak w sys_mmap + EFAULT) |
| - |
Skróć plik, wersja 64-bitowa (sys_truncate64) |
RDI = adres nazwy pliku ASCIIZ RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD) RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD) |
RAX = 0 RAX = -1, gdy błąd |
| - |
Skróć plik, wersja 64-bitowa (sys_ftruncate64) |
RDI = deskryptor pliku otwartego do zapisu RSI = liczba bajtów, do której ma zostać skrócony plik (niższy DWORD) RDX = liczba bajtów, do której ma zostać skrócony plik (wyższy DWORD) |
RAX = 0 RAX = -1, gdy błąd |
| - |
Pobierz status pliku, wersja 64-bitowa (sys_stat64) |
RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest
status obiektu docelowego. RSI = adres struktury stat64 |
RAX = 0 RAX = -1, gdy błąd |
| - |
Pobierz status pliku, wersja 64-bitowa (sys_lstat64) |
RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany
jest status linku, a nie obiektu docelowego. RSI = adres struktury stat64 |
RAX = 0 RAX = -1, gdy błąd |
| - |
Pobierz status pliku, wersja 64-bitowa (sys_fstat64) |
RDI = deskryptor otwartego pliku RSI = adres struktury stat64 |
RAX = 0 RAX = -1, gdy błąd |
| - |
Zmiana właściciela (sys_lchown32) |
RDI = adres nazwy pliku/katalogu ASCIIZ RSI = nowy numer użytkownika RDX = nowy numer grupy |
nic RAX = błąd EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EACCES, ELOOP i inne |
| - |
Pobierz identyfikator użytkownika (sys_getuid32) |
nic |
RAX = numer UID |
| - |
Pobierz ID grupy bieżącego procesu (sys_getgid32) |
nic |
RAX = ID grupy |
| - |
Pobierz efektywne ID użytkownika bieżącego procesu (sys_geteuid32) |
nic |
RAX = efektywny UID |
| - |
Pobierz efektywne ID grupy bieżącego procesu (sys_getegid32) |
nic |
RAX = efektywny GID |
| - |
Ustaw realny i efektywny ID użytkownika (sys_setreuid32) |
RDI = realny ID użytkownika (UID) RSI = efektywny UID |
nic RAX = błąd EPERM |
| - |
Ustaw realny i efektywny ID grupy (sys_setregid32) |
RDI = realny ID grupy (GID) RSI = efektywny GID |
nic RAX = błąd EPERM |
| - |
Pobierz liczbę dodatkowych grup (sys_getgroups32) |
RDI = rozmiar tablicy z RSI RSI = adres tablicy, gdzie zostaną zapisane GID-y (DWORDY) grup dodatkowych |
RAX = liczba dodatkowych grup procesu RAX = -1 oznacza błąd (EFAULT, EINVAL, EPERM) |
| - |
Ustaw liczbę dodatkowych grup (sys_setgroups32) |
RDI = rozmiar tablicy z RSI RSI = adres tablicy, gdzie zawierającą GID-y (DWORDY) |
RAX = 0 RAX = -1 oznacza błąd (EFAULT, EINVAL, EPERM) |
| - |
Zmiana właściciela (sys_fchown32) |
RDI = deskryptor otwartego pliku RSI = nowy numer użytkownika RDX = nowy numer grupy |
RAX = 0 RAX = -1, gdy błąd |
| - |
Ustaw różne ID użytkownika (sys_setresuid32) |
RDI = realny UID lub -1 (wtedy jest bez zmian) RSI = efektywny UID lub -1 (bez zmian) RDX = zachowany (saved) UID lub -1 (bez zmian) |
RAX = 0 RAX = -1, gdy błąd EPERM |
| - |
Pobierz różne ID użytkownika (sys_getresuid32) |
RDI = adres DWORDa, który otrzyma realny UID RSI = adres DWORDa, który otrzyma efektywny UID RDX = adres DWORDa, który otrzyma zachowany UID |
RAX = 0 RAX = -1, gdy błąd EFAULT |
| - |
Ustaw realny, efektywny i zachowany ID grupy (sys_setresgid32) |
RDI = realny GID RSI = efektywny GID RDX = zachowany (saved) GID |
RAX = 0 RAX = -1, gdy błąd EPERM |
| - |
Pobierz realny, efektywny i zachowany ID grupy (sys_getresgid32) |
RDI = adres DWORDa, który otrzyma realny GID RSI = adres DWORDa, który otrzyma efektywny GID RDX = adres DWORDa, który otrzyma zachowany (saved) GID |
RAX = 0 RAX = -1, gdy błąd EFAULT |
| - |
Zmiana właściciela pliku (sys_chown32) |
RDI=adres ścieżki do pliku RSI = UID nowego właściciela RDX = GID nowej grupy |
RAX = 0 RAX = -1, gdy błąd na przykład EPERM, EROFS, EFAULT, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EACCES, ELOOP |
| - |
Ustaw identyfikator użytkownika (sys_setuid32) |
RDI = nowy UID |
nic RAX = błąd EPERM |
| - |
Ustaw ID grupy bieżącego procesu (sys_setgid32) |
RDI = nowy ID grupy |
nic RAX = błąd EPERM |
| - |
Ustal UID przy sprawdzaniu systemów plików (sys_setfsuid32) |
RDI = nowy ID użytkownika |
RAX = stary UID (zawsze) |
| - |
Ustal GID przy sprawdzaniu systemów plików (sys_setfsgid32) |
RDI = nowy ID grupy |
RAX = stary GID (zawsze) |
| - |
Kontrola nad deskryptorem pliku, wersja 64-bitowa (sys_fcntl64) |
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 |
| - |
brak danych |
- |
- |
| - |
Funkcja systemowa sys_alloc_hugepages |
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał |
zawsze RAX = -1, błąd ENOSYS |
| - |
Funkcja systemowa sys_free_hugepages |
zaimplementowane tylko w jądrach 2.5.36 - 2.5.54, więc nie będę omawiał |
zawsze RAX = -1, błąd ENOSYS |
| - |
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_statfs64) |
RDI = adres nazwy dowolnego pliku w zamontowanym systemie plików RSI adres struktury statfs64 |
RAX = 0 RAX = -1, gdy błąd |
| - |
Pobierz statystyki systemu plików, wersja 64-bitowa (sys_fstatfs64) |
RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie plików RSI = adres struktury statfs64 |
RAX = 0 RAX = -1, gdy błąd |
| - |
sys_setaltroot |
nieużywane |
brak danych |
| - |
Funkcja systemowa sys_oldlstat (porzucone) |
|
|