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 |
---|---|---|---|---|
51 | 163 |
Włącz/wyłącz zapisywanie kończonych procesów (sys_acct) |
EBX/RDI = adres nazwy pliku, gdzie ma być zapisywana informacja o kończonych procesach lub
NULL, gdy chcemy wyłączyć takie zapisywanie. |
EAX = 0 EAX = błąd ENOSYS, ENOMEM, EPERM, EACCES, EIO, EUSERS |
52 | 166 |
Odmontowanie systemu plików 2 (sys_umount2) |
EBX/RDI = adres nazwy zamontowanego pliku specjalnego/katalogu ASCIIZ ECX/RSI = flaga = 1, by siłą odmonotwać, inaczej 0 |
EAX = 0 EAX = błąd - każdy związany z systemem plików |
53 | - |
Funkcja systemowa sys_lock (porzucone) |
--nieużywane od 2.0-- |
zawsze EAX = -1 |
54 | 16 |
Manipulacja urządzeniem znakowym (sys_ioctl) |
EBX/RDI = deskryptor pliku ECX/RSI = kod komendy (man 2 ioctl_list) EDX/RDX = adres zapisywalnego obszaru danych lub innej struktury, zależy od komendy |
EAX = 0 EAX = błąd EBADF, EFAULT, EINVAL, ENOTTY |
55 | 72 |
Kontrola nad deskryptorem pliku (sys_fcntl) |
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 |
56 | - |
Funkcja systemowa sys_mpx (porzucone) |
--nieużywane od 2.0-- |
zawsze EAX = -1 |
57 | 109 |
Ustaw ID grupy procesu (sys_setpgid) |
EBX/RDI = ID procesu (PID) ECX/RSI = ID grupy |
EAX = 0 EAX = błąd EINVAL, EPERM, ESRCH |
58 libc | - |
Pobierz/ustaw limity zasobów (sys_ulimit) |
--nieużywane (zamiast tego używaj getrlimit, setrlimit, sysconf)-- man 3 ulimit EBX/RDI = komenda, patrz: sys_ulimit ECX/RSI = nowylimit | EAX = aktualny limit EAX = błąd |
59 | - |
Funkcja systemowa sys_oldolduname (porzucone) |
|
|
60 | 95 |
Ustaw maskę uprawnień przy tworzeniu plików (sys_umask) |
EBX/RDI = maska, patrz prawa dostępu / tryb Gdy tworzymy plik o uprawnieniach X, naprawdę ma on uprawnienia X AND (NOT umask) |
EAX = poprzednia umask |
61 | 161 |
Zmień katalog główny (sys_chroot) |
EBX/RDI = adres nazwy/ścieżki nowego katalogu głównego |
EAX = 0 EAX = błąd - każdy zależny od systemu plików |
62 libc | 136 |
Informacje o zamontowanym systemie plików (sys_ustat) |
--zamiast tego, używaj statfs-- EBX:ECX?/RDI = numer główny:poboczny urządzenia / EBX/RDI wskazuje na 64 bity numeru urządzenia EDX/ECX (odpowiednio) / RSI = adres struktury ustat |
EAX = 0 EAX = błąd EFAULT, EINVAL, ENOSYS |
63 | 33 |
Zamień deskryptor zduplikowanym deskryptorem pliku (sys_dup2) |
EBX/RDI = deskryptor do zduplikowania ECX/RSI = deskryptor, do którego powinien być przyznany duplikat |
EAX = zduplikowany deskryptor EAX = błąd EBADF, EMFILE |
64 | 110 |
Pobierz PID procesu rodzica (sys_getppid) |
nic |
EAX = PID rodzica |
65 | 111 |
Pobierz ID grupy procesu rodzica (sys_getpgrp) |
nic |
EAX = GID rodzica EAX=błąd EINVAL, EPERM, ESRCH |
66 | 112 |
Stwórz sesję, ustaw ID grupy (sys_setsid) |
nic |
EAX = ID procesu uruchamiającego EAX=błąd EPERM |
67 | - |
Pobierz/ustal procedurę obsługi sygnału (sys_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ę |
EAX = 0 EAX=błąd EINVAL, EINTR, EFAULT |
68 | - |
Pobierz maskę sygnałów procesu (sys_sgetmask) |
--przestarzałe (zamiast tego używaj sys_sigprocmask)-- |
EAX = maska sygnałów bieżącego procesu |
69 | - |
Ustaw maskę sygnałów procesu (sys_ssetmask) |
--przestarzałe (zamiast tego używaj sys_sigprocmask)-- EBX/RDI = nowa maska sygnałów procesu |
EAX = poprzednia maska sygnałów |
70 | 113 |
Ustaw realny i efektywny ID użytkownika (sys_setreuid) |
EBX/RDI = realny ID użytkownika (UID) ECX/RSI = efektywny UID |
EAX = 0 EAX = błąd EPERM |
71 | 114 |
Ustaw realny i efektywny ID grupy (sys_setregid) |
EBX/RDI = realny ID grupy (GID) ECX/RSI = efektywny GID |
EAX = 0 EAX = błąd EPERM |
72 | - |
Zastąpienie dla sigpause - sys_sigsuspend |
EBX/RDI = adres nowej maski sygnałowej procesu - struktury sigset_t |
EAX = 0 EAX = błąd |
73 | - |
Pobierz trwające blokujące sygnały (sys_sigpending) |
EBX/RDI = adres maski sygnałów - struktury sigset_t |
EAX = 0 EAX = błąd |
74 | 170 |
Ustaw nazwę hosta dla systemu (sys_sethostname) |
EBX/RDI = adres nazwy hosta ECX/RSI = długość nazwy |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
75 | 160 |
Ustaw limity zasobów (sys_setrlimit) |
EBX/RDI = numer zasobu ECX/RSI = adres struktury rlimit |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
76 | 97 |
Pobierz limity zasobów (sys_getrlimit) |
EBX/RDI = numer zasobu ECX/RSI = adres struktury rlimit |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
77 | 98 |
Pobierz zużycie zasobów (sys_getrusage) |
EBX/RDI = numer użytkownika (who) ECX/RSI = adres struktury rusage |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
78 | 96 |
Pobierz czas (sys_gettimeofday) |
EBX/RDI = adres struktury timeval ECX/RSI = adres struktury timezone |
RAX = 0 i wynik zapisany w strukturach EAX = błąd EFAULT, EINVAL, EPERM |
79 | 164 |
Ustaw czas (sys_settimeofday) |
EBX/RDI = adres struktury timeval ECX/RSI = adres struktury timezone |
EAX = 0 EAX = błąd EFAULT, EINVAL, EPERM |
80 | 115 |
Pobierz liczbę dodatkowych grup (sys_getgroups) |
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 |
81 | 116 |
Ustaw liczbę dodatkowych grup (sys_setgroups) |
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 |
82 | 23 |
Oczekiwanie zmiany stanu deskryptora(ów) (sys_select) |
EBX/RDI = najwyższy numer spośród deskryptorów + 1 ECX/RSI = adres tablicy deskryptorów sprawdzanych, czy można z nich czytać EDX/RDX = adres tablicy deskryptorów sprawdzanych, czy można do nich pisać ESI/R10 = adres tablicy deskryptorów 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 = błąd EBADF, EINTR, EINVAL, ENOMEM |
83 | 88 |
Stwórz dowiązanie symboliczne do pliku (sys_symlink) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = adres nazwę linku ASCIIZ |
EAX = 0 EAX = błędy związane z uprawnieniami lub systemem plików |
84 | - |
Funkcja systemowa sys_oldlstat (porzucone) |
|
|
85 | 89 |
Przeczytaj zawartość linku symbolicznego (sys_readlink) |
EBX/RDI = adres nazwy dowiązania symbolicznego ASCIIZ ECX/RSI = adres bufora, który otrzyma przeczytaną informację EDX/RDX = długość bufora |
EAX = liczba przeczytanych znaków EAX = błąd |
86 | 134 |
Wybierz współdzieloną bibliotekę (sys_uselib) |
EBX/RDI = adres nazwy biblioteki ASCIIZ |
EAX = 0 EAX = błąd EACCES, ENOEXEC |
87 | 167 |
Uruchomienie pliku wymiany (sys_swapon) |
EBX/RDI = adres ścieżki do pliku/urządzenia swap ECX/RSI = flagi wymiany |
EAX = 0 EAX = błąd |
88 | 169 |
Reboot systemu (sys_reboot) |
EBX/RDI = pierwsza liczba magiczna = 0FEE1DEADh ECX/RSI = druga liczba magiczna = 672274793 lub 85072278 lub 369367448 EDX/RDX = flaga ESI/R10 = adres dodatkowego argumentu (tylko przy RESTART2) |
EAX = 0 EAX = błąd |
89 | - |
Czytaj katalog (sys_readdir) |
EBX/RDI = deskryptor otwartego katalogu ECX/RSI = adres struktury dirent EDX/RDX = liczba struktur do odczytania (ignorowane, czytana jest 1 struktura) |
EAX = 1 EAX = 0 na końcu katalogu EAX = błąd |
90 | 9 |
Mapuj plik/urządzenie do pamięci (sys_mmap) |
-- zgodne z man 2 mmap-- EBX/RDI = proponowany adres początkowy ECX/RSI = długość mapowanego obszaru 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 |
EAX = rzeczywisty adres mapowania EAX = błąd |
91 | 11 |
Odmapuj plik/urządzenie z pamięci (sys_munmap) |
EBX/RDI = adres początkowy obszaru ECX/RSI = liczba bajtów |
EAX = 0 EAX = błąd |
92 | 76 |
Skróć plik (sys_truncate) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = liczba bajtów, do której ma zostać skrócony plik |
EAX = 0 EAX = błąd |
93 | 77 |
Skróć plik (sys_ftruncate) |
EBX/RDI = deskryptor pliku otwartego do zapisu ECX/RSI = liczba bajtów, do której ma zostać skrócony plik |
EAX = 0 EAX = błąd |
94 | 91 |
Zmiana uprawnień (sys_fchmod) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = nowe prawa dostępu |
EAX = 0 EAX = błąd |
95 | 93 |
Zmiana właściciela (sys_fchown) |
EBX/RDI = deskryptor otwartego pliku ECX/RSI = nowy numer użytkownika EDX/RDX = nowy numer grupy |
EAX = 0 EAX = błąd |
96 | 140 |
Podaj priorytet szeregowania zadań (sys_getpriority) |
EBX/RDI = czyj priorytet zmieniamy ECX/RSI = identyfikator procesu, grupy procesów lub użytkownika, którego priorytet zmieniamy (0=bieżący) |
EAX = aktualny priorytet dla wybranego obiektu (od 1 do 40) |
97 | 141 |
Ustaw priorytet szeregowania zadań (sys_setpriority) |
EBX/RDI = czyj priorytet zmieniamy ECX/RSI = identyfikator procesu, grupy procesów lub użytkownika, którego priorytet zmieniamy (0=bieżący) EDX/RDX = nowy priorytet -20...19 |
EAX = 0 EAX = błąd |
98 | - |
Profilowanie czasu wykonywania (sys_profil) |
--man 3 profil-- EBX/RDI = adres tablicy WORDów ECX/RSI = długość tej tablicy, na którą pokazuje EBX/RDI EDX/RDX = offset początkowy ESI/R10 = mnożnik |
zawsze EAX = 0 |
99 | 137 |
Pobierz statystyki systemu plików (sys_statfs) |
EBX/RDI = adres nazwy dowolnego pliku w zamontowanym systemie plików ECX/RSI = adres struktury statfs |
EAX = 0 EAX = błąd |
100 | 138 |
Pobierz statystyki systemu plików (sys_fstatfs) |
EBX/RDI = deskryptor dowolnego otwartego pliku w zamontowanym systemie plików ECX/RSI = adres struktury statfs |
EAX = 0 EAX = błąd |