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 |
---|---|---|---|---|
101 | 173 |
Zmień prawa dostępu do portów (sys_ioperm) |
EBX/RDI = początkowy numer portu ECX/RSI = liczba bajtów, które będzie można wysłać/odebrać EDX/RDX = końcowy numer portu |
EAX = 0 EAX = błąd |
102 | 41 |
Funkcje gniazd (sys_socketcall) |
EBX/RDI = numer funkcji do uruchomienia ECX/RSI = adres argumentów |
EAX = wartość zwrócona przez żądaną funkcję? |
103 | 103 |
Opcje logowania (sys_syslog) |
EBX/RDI = komenda syslog ECX/RSI = adres bufora znakowego EDX/RDX = liczba bajtów (patrz opis EBX/RDI) |
EAX = liczba bajtów (patrz opis EBX/RDI) lub 0 EAX = błąd EINVAL, EPERM, ERESTARTSYS, ENOSYS |
104 | 38 |
Ustaw wartość czasomierza (sys_setitimer) |
EBX/RDI = numer czasomierza ECX/RSI = adres struktury itimerval zawierającej nową wartość czasomierza ECX/RSI = adres struktury itimerval, która otrzyma starą wartość czasomierza |
EAX = 0 EAX = błąd |
105 | 36 |
Pobierz wartość czasomierza (sys_getitimer) |
EBX/RDI = numer czasomierza ECX/RSI = adres struktury itimerval, która otrzyma wartość czasomierza | EAX = 0 EAX = błąd |
106 | 4 |
Pobierz status pliku (sys_stat) |
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany jest
status obiektu docelowego. ECX/RSI = adres struktury stat |
EAX = 0 EAX = błąd |
107 | 6 |
Pobierz status pliku (sys_lstat) |
EBX/RDI = adres nazwy pliku ASCIIZ. Jeśli plik jest linkiem, to zwracany
jest status linku, a nie obiektu docelowego. ECX/RSI = adres struktury stat |
EAX = 0 EAX = błąd |
108 | 5 |
Pobierz status pliku (sys_fstat) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = adres struktury stat |
EAX = 0 EAX = błąd |
109 | - |
Funkcja systemowa sys_olduname (porzucone) |
|
|
110 | 172 |
Ustaw prawa dostępu do wszystkich portów (sys_iopl) |
EBX/RDI = poziom IOPL od 0 (normalny proces) do 3 |
EAX = 0 EAX = błąd |
111 | 153 |
Wirtualnie odłącz bieżący terminal (sys_vhangup) |
nic |
EAX = 0 EAX = błąd EPERM |
112 | - |
Spowoduj bezczynność procesu 0 (sys_idle) |
nic |
dla procesu nr 0 nigdy nie wraca. Dla pozostałych zwraca EAX = EPERM |
113 | - |
Przejdź w tryb wirtualny 8086 (sys_vm86old) |
--to było przed jądrem 2.0.38-- EBX/RDI = adres struktury vm86_struct |
EAX = 0 EAX = błąd |
114 | 61 |
Czekaj na zakończenie procesu (sys_wait4) |
EBX/RDI = PID procesu potomnego lub specyfikacja ECX/RSI = NULL lub adres zmiennej DWORD, która otrzyma status EDX/RDX = opcje ESI/R10 = adres struktury rusage |
EAX = PID zakończonego procesu EAX = błąd EAX = 0 dla WNOHANG |
115 | 168 |
Wyłączenie pliku wymiany (sys_swapoff) |
EBX/RDI = adres ścieżki i nazwy pliku/urządzenia swap |
EAX = 0 EAX = błąd |
116 | 99 |
Pobierz statystyki systemowe (sys_sysinfo) |
EBX/RDI = adres struktury sysinfo |
EAX = 0 EAX = błąd |
117 | - |
Komunikacja międzyprocesowa SysV (sys_ipc) |
EBX/RDI = numer wywoływanej funkcji ECX/RSI, EDX/RDX, ESI/R10 = parametry 1-3 wywoływanej funkcji EDI/R8 = adres dalszych parametrów, jeśli trzeba EBP/R9 = parametr piąty |
zależy od wywoływanej funkcji |
118 | 74 |
Zapisz pamięć podręczną na dysk (sys_fsync) |
EBX/RDI = deskryptor pliku, który ma być zsynchronizowany na dysk |
EAX = 0 EAX = błąd |
119 | - |
Powrót z procedury obsługi sygnału (sys_sigreturn) |
EBX/RDI = argument zależny od architektury, używany przez jądro |
nigdy nie powraca |
120 | 56 |
Utwórz klon procesu (sys_clone) |
EBX/RDI = flagi klonowania ECX/RSI = wskaźnik na oddzielny stos klona EDX/RDX = wskaźnik na strukturę pt_regs lub 0 |
EAX = numer PID klona lub EAX = błąd EAGAIN, ENOMEM, EINVAL, EPERM |
121 | 171 |
Ustal nazwę domeny (sys_setdomainname) |
EBX/RDI = adres łańcucha znaków, zawierającego domenę ECX/RSI = długość tego łańcucha znaków |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT |
122 | 63 |
Pobierz informację o jądrze (sys_uname) |
EBX/RDI = adres struktury utsname |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT |
123 | 154 |
Zmień tablicę LDT (sys_modify_ldt) |
EBX/RDI = numer funkcji ECX/RSI = adres miejsca na przechowanie danych EDX/RDX = liczba bajtów obszaru pod [ECX/RSI] |
EAX = liczba przeczytanych bajtów lub 0 (gdy zapisywano) EAX = błąd EINVAL, ENOSYS, EFAULT |
124 | 159 |
Dopasowanie zegara w jądrze (sys_adjtimex) |
EBX/RDI = adres struktury timex |
EAX = stan zegara (patrz timex) EAX = błąd EINVAL, EPERM, EFAULT |
125 | 10 |
Kontrola dostępu do obszaru pamięci (sys_mprotect) |
EBX/RDI = adres obszaru pamięci (wyrównany do granicy strony) ECX/RSI = długość tego obszaru w bajtach (względem strony pamięci) EDX/RDX = bity włączające ochronę |
EAX=0 EAX = błąd EACCES, ENOMEM, EINVAL, EFAULT |
126 | - |
Zmiana listy blokowanych sygnałów (sys_sigprocmask) |
EBX/RDI = co zrobić ECX/RSI = adres struktury sigset_t EDX/RDX = adres struktury sigset_t (do przechowania starej maski) lub 0 |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT |
127 | 174 |
Utwórz wpis ładowalnego modułu jądra (sys_create_module) |
EBX/RDI = adres nazwy modułu ECX/RSI = długość nazwy |
EAX = adres modułu w jądrze EAX = błąd EINVAL, EPERM, EFAULT, EEXIST, ENOMEM |
128 | 175 |
Inicjalizacja modułu jądra (sys_init_module) |
EBX/RDI = adres nazwy modułu ECX/RSI = adres struktury module |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT, ENOENT, EBUSY |
129 | 176 |
Usuń wpis nieużywanego modułu jądra (sys_delete_module) |
EBX/RDI = adres nazwy modułu (0 oznacza usunięcie wpisów wszystkich nieużywanych modułów,
które można usunąć automatycznie) |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT, ENOENT, EBUSY |
130 | 177 |
Pobierz symbole eksportowane przez jądro i moduły (sys_get_kernel_syms) |
EBX/RDI = adres struktury kernel_sym
(0 oznacza, że chcemy tylko pobrać liczbę symboli) |
EAX = liczba symboli EAX = błąd EINVAL, EPERM, EFAULT, ENOENT, EBUSY |
131 | 179 |
Zarządzanie limitami dyskowymi (sys_quotactl) |
EBX/RDI = komenda limitu ECX/RSI = adres nazwy pliku urządzenia blokowego, który ma być zarządzany EDX/RDX = identyfikator UID lub GID ESI/R10 = adres dodatkowej struktury danych (zależy od komendy w EBX/RDI) |
EAX = 0 EAX = błąd EINVAL, EPERM, EFAULT, ENOENT, EBUSY, ENOTBLK, ESRCH, EUSERS, EACCES |
132 | 121 |
Pobierz ID grupy procesów dla danego procesu (sys_getpgid) |
EBX/RDI = PID danego procesu |
EAX = ID grupy procesów EAX = błąd ESRCH |
133 | 81 |
Zmień katalog roboczy (sys_fchdir) |
EBX/RDI = deskryptor otwartego katalogu |
EAX = 0 EAX = błąd EBADF, EACCES i inne |
134 | - |
Demon wypróżniania buforów (sys_bdflush) |
EBX/RDI = komenda demona ECX/RSI = dodatkowy parametr, zależny od komendy |
EAX=0, gdy sukces i EBX/RDI>0 EAX = błąd EPERM, EFAULT, EBUSY, EINVAL |
135 | 139 |
Informacje o systemie plików (sys_sysfs) |
EBX/RDI = opcja ECX/RSI, EDX/RDX - zależne od EBX/RDI |
EAX zależne od EBX/RDI EAX = błąd EINVAL, EFAULT |
136 | 135 |
Ustal domenę wykonywania procesu (sys_personality) |
EBX/RDI = numer nowej domeny |
EAX = numer starej domeny EAX = błąd |
137 | 183 |
Funkcja systemowa sys_afs_syscall |
niezaimplementowane w jądrach 2.4 |
zawsze EAX = ENOSYS |
138 | 122 |
Ustal UID przy sprawdzaniu systemów plików (sys_setfsuid) |
EBX/RDI = nowy ID użytkownika |
EAX = stary UID (zawsze) |
139 | 123 |
Ustal GID przy sprawdzaniu systemów plików (sys_setfsgid) |
EBX/RDI = nowy ID grupy |
EAX = stary GID (zawsze) |
140 | - |
Zmiana bieżącej pozycji w dużym pliku (sys_llseek) |
EBX/RDI = deskryptor otwartego pliku ECX:EDX/RSI = liczba bajtów, o którą chcemy się przesunąć ESI/RDX = adres QWORDa, który otrzyma nową pozycję w pliku (big endian?) EDI/R10 = odkąd zaczynamy ruch |
EAX = 0 EAX = błąd EBADF, EINVAL |
141 | 78 |
Pobierz wpisy o katalogach (sys_getdents) |
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 |
142 | - |
Oczekiwanie zmiany stanu deskryptora(ów) (sys_newselect) |
EBX/RDI = najwyższy numer spośród deskryptorów + 1 (co najwyżej FILE_MAX) ECX/RSI = adres tablicy deskryptorów (lub 0) sprawdzanych, czy można z nich czytać EDX/RDX = adres tablicy deskryptorów (lub 0) sprawdzanych, czy można do nich pisać ESI/R10 = adres tablicy deskryptorów (lub 0) sprawdzanych, czy nie wystąpił u nich wyjątek EDI/R8 = adres struktury timeval zawierającą maksymalny czas oczekiwania |
EAX = całkowita liczba deskryptorów, która pozostała w tablicach EAX = 0, gdy skończył się czas EAX = wystąpił błąd EBADF, EINVAL, ENOMEM, EINTR |
143 | 73 |
Zmień blokowanie plików (sys_flock) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = operacja do wykonania |
EAX = 0 EAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
144 | 26 |
Synchronizuj mapowany plik z pamięcią (sys_msync) |
EBX/RDI = adres do zrzucenia na dysk (zostaną zrzucone zmodyfikowane strony pamięci
zawierającej ten adres i co najwyżej ECX/RSI-1 zmienionych następnych) ECX/RSI = liczba bajtów/rozmiar obszaru do zrzucenia na dysk EDX/RDX = 0 lub zORowane flagi |
EAX = 0 EAX = błąd EBUSY, EIO, ENOMEM, EINVAL, ENOLCK |
145 | 19 |
Czytaj wektor (sys_readv) |
EBX/RDI = deskryptor otwartego obiektu, z którego będą czytane dane ECX/RSI = adres tablicy struktur iovec EDX/RDX = liczba struktur iovec, do których będą czytane dane |
EAX = 0 EAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
146 | 20 |
Zapisz wektor (sys_writev) |
EBX/RDI = deskryptor otwartego obiektu, do którego będą zapisane dane ECX/RSI = adres tablicy struktur iovec EDX/RDX = liczba struktur iovec, z których będą czytane dane do zapisania |
EAX = 0 EAX = błąd EWOULDBLOCK, EBADF, EINTR, EINVAL, ENOLCK |
147 | 124 |
Pobierz ID sesji dla procesu (sys_getsid) |
EBX/RDI = PID procesu, którego ID sesji chcemy znać |
EAX = ID sesji EAX = błąd EPERM, ESRCH |
148 | 75 |
Zapisz bufory danych pliku na dysk (sys_fdatasync) |
EBX/RDI = deskryptor pliku, którego DANE będą zsynchronizowane (ale na przykład czas dostępu nie
będzie zmieniony) |
EAX = 0 EAX = błąd EBADF, EIO, EROFS |
149 | 156 |
Zmień parametry jądra (sys_sysctl) |
EBX/RDI = adres struktury sysctl_args |
EAX = 0 EAX = błąd EPERM, ENOTDIR, EFAULT |
150 | 149 |
Zablokowanie stron w pamięci (sys_mlock) |
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, EAGAIN, ENOMEM, EPERM |