Opis funkcji przerwania int 80h: 1-50

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.

Podstawowe funkcje przerwania 80h: 1-50
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
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



Kolejna część (klawisz dostępu 4)
Spis treści off-line (klawisz dostępu 1)
Spis treści on-line (klawisz dostępu 2)
Ułatwienia dla niepełnosprawnych (klawisz dostępu 0)