Opis funkcji przerwania int 80h: 101-150

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: 101-150
Numer/ EAX x86-64 RAX Opis ArgumentyZwraca
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



Poprzednia część (klawisz dostępu 3)
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)