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 |
---|---|---|---|---|
1 | 60 |
Wyjście z programu (sys_exit) |
EBX/RDI = kod wyjścia (errorlevel) |
nie wraca do programu wywołującego |
2 | 57 |
Uruchomienie nowego procesu (sys_fork) |
EBX/RDI = adres struktury pt_regs |
EAX=id procesu potomnego (PID) EAX=błąd EAGAIN, ENOMEM |
3 | 0 |
Czytanie z pliku (sys_read) |
EBX/RDI = deskryptor pliku ECX/RSI = adres bufora docelowego EDX/RDX = liczba bajtów do przeczytania |
EAX=liczba przeczytanych bajtów EAX = błąd EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR |
4 | 1 |
Zapis do pliku (sys_write) |
EBX/RDI = deskryptor pliku ECX/RSI = adres bufora źródłowego EDX/RDX = liczba bajtów do zapisania |
EAX=liczba zapisanych bajtów EAX = błąd EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, ENOSPC, EPIPE |
5 | 2 |
Otwarcie pliku (sys_open) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = bity dostępu EDX/RDX = prawa dostępu / tryb |
EAX=deskryptor pliku EAX = błąd EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO, EROFS, ETXTBSY |
6 | 3 |
Zamknięcie pliku (sys_close) |
EBX/RDI = deskryptor pliku |
EAX = 0 EAX = błąd EBADF, EINTR, EIO |
7 | - |
Czekaj na zmianę stanu innego procesu (sys_waitpid) |
EBX/RDI = id procesu / specyfikacja ECX/RSI = NULL lub adres zmiennej DWORD, która otrzyma status EDX/RDX = opcje |
EAX=PID zakończonego procesu [ECX/RSI] = (jeśli podano adres bufora) stan wyjścia procesu EAX = błąd ECHILD, EINVAL, ERESTARTSYS |
8 | 85 |
Utworzenie pliku (sys_creat, nie create!) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = prawa dostępu / tryb |
EAX=deskryptor pliku EAX = błąd EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE, ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO, EROFS, ETXTBSY |
9 | 86 |
Utworzenie twardego dowiązania do pliku (sys_link) |
EBX/RDI = adres nazwy istniejącego pliku ASCIIZ ECX/RSI = adres nazwy nowego pliku ASCIIZ |
EAX = 0 EAX=błąd EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV |
10 | 87 |
Usunięcie pliku (sys_unlink) |
EBX/RDI = adres nazwy pliku ASCIIZ |
EAX = 0 EAX=błąd EACCES, EFAULT, EIO, EISDIR, ELOOP, ENOENT, ENAMETOOLONG, ENOMEM, ENOTDIR, EPERM, EROFS |
11 | 59 |
Uruchomienie innego programu (sys_execve) |
EBX/RDI = adres nazwy (ze ścieżką) programu ASCIIZ ECX/RSI = adres zakończonej dwordem 0 listy adresów argumentów uruchamianego programu ASCIIZ EDX/RDX = adres zakończonej dwordem 0 listy adresów zmiennych środowiska dla uruchamianego programu ASCIIZ |
nie wraca do programu wywołującego EAX = błąd E2BIG, EACCES, EINVAL, EOIO, EISDIR, ELIBBAD, ELOOP, ENFILE, ENOEXEC, ENOENT, ENOMEM, ENOTDIR, EFAULT, ENAMETOOLONG, EPERM, ETXTBUSY |
12 | 80 |
Zmiana katalogu (sys_chdir) |
EBX/RDI = adres nazwy nowego katalogu ASCIIZ |
EAX = 0 EAX = błąd EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR |
13 | 201 |
Pobierz czas (sys_time) |
EBX/RDI = NULL lub adres bufora, który otrzyma kopię wyniku |
EAX = liczba sekund od 1 Stycznia 1970 minus 1 EAX = błąd EFAULT |
14 | 133 |
Utworzenie pliku specjalnego (sys_mknod) |
EBX/RDI = adres ścieżki ASCIIZ ECX/RSI = typ urządzenia OR prawa dostępu EDX/RDX,ESI/R10 - wynik działania makra makedev |
EAX = 0 EAX = błąd EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS |
15 | 90 |
Zmiana uprawnień (sys_chmod) |
EBX/RDI = adres nazwy pliku/katalogu ASCIIZ ECX/RSI = nowe prawa dostępu |
EAX = 0 EAX = błąd EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, EPERM, EROFS |
16 | 94 |
Zmiana właściciela (sys_lchown) |
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 |
17 | - |
Funkcja systemowa sys_break (porzucone) |
Istnieje tylko dla zachowania zgodności |
EAX = błąd ENOSYS |
18 | - |
Funkcja systemowa sys_oldstat (porzucone) |
|
|
19 | 8 |
Zmiana bieżącej pozycji w pliku (sys_lseek) |
EBX/RDI = deskryptor pliku ECX/RSI = liczba bajtów, o którą chcemy się przesunąć EDX/RDX = odkąd zaczynamy ruch |
EAX = nowa pozycja względem początku pliku EAX = błąd EBADF, EINVAL, EISPIPE |
20 | 39 |
Pobierz identyfikator bieżącego procesu (sys_getpid) |
nic |
EAX = PID bieżącego procesu |
21 | 165 |
Montowanie systemu plików (sys_mount) |
EBX/RDI = adres nazwy urządzenia/pliku specjalnego ECX/RSI = adres ścieżki do punktu montowania EDX/RDX = adres nazwy systemu plików ESI/R10 = flagi montowania EDI/R8 = adres dodatkowych danych, niezależne od urządzenia |
EAX = 0 EAX = błąd - każdy, który może się zdarzyć w systemie plików lub jądrze |
22 | - |
Odmontowanie systemu plików (sys_umount) |
EBX/RDI = adres nazwy pliku specjalnego lub katalogu (zamontowanego) |
EAX = 0 EAX = błąd - każdy, który może się zdarzyć w systemie plików lub jądrze |
23 | 105 |
Ustaw identyfikator użytkownika (sys_setuid) |
EBX/RDI = nowy UID |
EAX = 0 EAX = błąd EPERM |
24 | 102 |
Pobierz identyfikator użytkownika (sys_getuid) |
nic |
EAX = numer UID |
25 | - |
Ustaw czas systemowy (sys_stime) |
EBX/RDI = nowy czas jako liczba sekund, które upłynęły od 1 Stycznia 1970 |
EAX = 0 EAX = błąd EPERM |
26 | 101 |
Śledzenie procesu (sys_ptrace) |
EBX/RDI = żądane działanie ECX/RSI = identyfikator PID żądanego procesu EDX/RDX = adres w procesie docelowym ESI/R10 = adres w procesie śledzącym |
EAX zależne od działania EAX = błąd EIO, EFAULT, EPERM, ESRCH |
27 | 37 |
Alarm - wysłanie sygnału SIGALARM (sys_alarm) |
EBX/RDI = sekundy |
EAX = 0 lub liczba sekund do wykonania poprzednich alarmów |
28 | - |
Funkcja systemowa sys_oldfstat (porzucone) |
|
|
29 | 34 |
Pauza - śpij aż do otrzymania sygnału (sys_pause) |
nic |
wraca tylko po sygnale, o ile procedura jego obsługi ma powrót.
EAX = EINTR po sygnale |
30 | 132 |
Zmień czas dostępu do pliku (sys_utime) |
EBX/RDI = adres nazwy pliku (ASCIIZ) ECX/RSI = adres struktury utimbuf, NULL gdy chcemy bieżący czas |
EAX = 0 EAX = błąd EACCES, ENOENT, EPERM, EROFS |
31 | - |
Funkcja systemowa sys_stty (porzucone) |
--nieużywane od 2.0-- |
zawsze EAX = -1 |
32 | - |
Funkcja systemowa sys_gtty (porzucone) |
--nieużywane od 2.0-- |
zawsze EAX = -1 |
33 | 21 |
Sprawdź uprawnienia dostępu do pliku (sys_access) |
EBX/RDI = adres nazwy pliku ASCIIZ ECX/RSI = prawa dostępu / tryb (wartości R_OK, W_OK, X_OK) |
EAX = 0 EAX = błąd - każdy związany z systemem plików i plikami |
34 | - |
Zmień priorytet procesu (sys_nice) |
EBX/RDI = liczba, o którą zwiększyć numer priorytetu (czyli zmniejszyć sam priorytet) |
EAX = 0 EAX = błąd EPERM |
35 | - |
Pobierz bieżącą datę i czas - sys_ftime (przestarzałe) |
--zamiast tego, używaj time, gettimeofday-- EBX/RDI = adres struktury timeb |
zawsze EAX = 0 |
36 | 162 |
Zapisz pamięć podręczną na dysku (sys_sync) |
nic |
EAX zawsze = 0 i nie ma żadnych błędów |
37 | 62 |
Wyślij sygnał do procesu (sys_kill) |
EBX/RDI = numer PID procesu (patrz też specyfikacja) ECX/RSI = numer sygnału |
EAX = 0 EAX = błąd EINVAL, EPERM, ESRCH |
38 | 82 |
Przenieś plik/Zmień nazwę pliku (sys_rename) |
EBX/RDI=adres starej nazwy (i ewentualnie ścieżki) ASCIIZ ECX/RSI=adres nowej nazwy (i ewentualnie ścieżki) ASCIIZ |
EAX = 0 EAX = błąd EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne błędy systemu plików) |
39 | 83 |
Utwórz katalog (sys_mkdir) |
EBX/RDI = adres ścieżki/nazwy ASCIIZ ECX/RSI = prawa dostępu / tryb |
EAX = 0 EAX = błąd - każdy związany z systemem plików lub prawami dostępu |
40 | 84 |
Usuń katalog (sys_rmdir) |
EBX/RDI = adres ścieżki/nazwy ASCIIZ |
EAX = 0 EAX = błąd EACCES, EBUSY, EFAULT, ELOOP, ENAMETOOLONG, ENOENT, ENOMEM, ENOTDIR, ENOTEMPTY, EPERM, EROFS |
41 | 32 |
Zduplikuj deskryptor pliku (sys_dup) |
EBX/RDI = stary deskryptor |
EAX = nowy deskryptor EAX = błąd EBADF, EMFILE (,EINVAL) |
42 | 22 |
Utwórz potok (sys_pipe) |
EBX/RDI = adres tablicy dwóch DWORDów |
EAX = 0 i pod [EBX/RDI]: deskryptor odczytu z potoku fd(0) pod [EBX/RDI], deskryptor zapisu do potoku
fd(1) pod [EBX/RDI+4] EAX = błąd EFAULT, EMFILE, ENFILE |
43 | 100 |
Pobierz czasy procesów (sys_times) |
EBX/RDI = adres struktury tms |
EAX = liczba taktów zegara EAX = błąd |
44 | - |
Funkcja systemowa sys_prof (porzucone) |
niezaimplementowane w jądrach 2.4 |
zawsze EAX = ENOSYS |
45 | 12 |
Alokacja i dealokacja pamięci (sys_brk) |
EBX/RDI = 0, aby poznać aktualny najwyższy adres sekcji .bss EBX/RDI = (wirtualny) adres nowego wierzchołka .bss, powyżej spodu sekcji danych i poniżej bibliotek |
EAX = nowy najwyższy adres EAX = błąd ENOMEM |
46 | 106 |
Ustaw ID grupy bieżącego procesu (sys_setgid) |
EBX/RDI = nowy ID grupy |
EAX = 0 EAX = błąd EPERM |
47 | 104 |
Pobierz ID grupy bieżącego procesu (sys_getgid) |
nic |
EAX = ID grupy |
48 | - |
Ustaw procedurę obsługi sygnału (sys_signal) |
EBX/RDI = numer sygnału ECX/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)
|
EAX = adres poprzedniej procedury obsługi EAX = błąd SIG_ERR |
49 | 107 |
Pobierz efektywne ID użytkownika bieżącego procesu (sys_geteuid) |
nic |
EAX = UID |
50 | 108 |
Pobierz efektywne ID grupy bieżącego procesu (sys_getegid) |
nic |
EAX = GID |