   #Start Next Contents Funkcje x86-64: 0-50

                     Opis funkcji przerwania int 80h: 1-50

   Jesli jakas funkcja zakonczy sie bledem, w EAX/RAX zwracana jest
   wartosc ujemna z przedzialu od -4096 do -1 wlacznie.

   Z drugiej strony, opisy funkcji na stronach manuala mowia, ze zwracane
   jest -1, a wartosc bledu jest zapisywana do zmiennej errno z
   biblioteki GLIBC. Dzieje sie tak tylko w przypadku, gdy korzystamy z
   interfejsu jezyka C (czyli deklarujemy i uruchamiamy zewnetrzne
   funkcje odpowiadajace wywolaniom systemowym i linkujemy nasz program z
   biblioteka jezyka C), a nie bezposrednio z wywolan systemowych (czyli
   przerwania int 80h).

   Najbardziej aktualne informacje o funkcjach systemowych mozna znalezc
   zazwyczaj w sekcji 2 (lub 3) manuala, na przyklad man 2 open.

   Najnowsze wersje jadra mozna znalezc na www.kernel.org, a pliki z
   lista funkcji i ich numerow sa pod sciezkami:
     * arch/x86/include/asm/unistd_{32,64}.h
     * arch/x86/syscalls/syscall_{32,64}.tbl
     * arch/x86/entry/syscalls/syscall_{32,64}.tbl

   Najnowsze wersje stron manuala mozna znalezc tu:
   www.kernel.org/pub/linux/docs/man-pages.

   Napis ASCIIZ oznacza lancuch znakow ASCII zakonczony znakiem/bajtem
   Zerowym.

   Jesli potrzeba, przy kazdej funkcji jest odnosnik do opisu argumentow
   i innych dodatkowych informacji: typow danych, wartosci bledow,
   mozliwych wartosci parametrow itp.

   CAPTION: Podstawowe funkcje przerwania 80h: 1-50

   Numer/ EAX x86-64 RAX Opis Argumenty Zwraca
   1
   60
   Wyjscie z programu (sys_exit)
   EBX/RDI = kod wyjscia (errorlevel)
   nie wraca do programu wywolujacego
     _________________________________________________________________

   2
   57
   Uruchomienie nowego procesu (sys_fork)
   EBX/RDI = adres struktury pt_regs
   EAX=id procesu potomnego (PID)
   EAX=blad EAGAIN, ENOMEM
     _________________________________________________________________

   3
   0
   Czytanie z pliku (sys_read)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres bufora docelowego
   EDX/RDX = liczba bajtow do przeczytania
   EAX=liczba przeczytanych bajtow
   EAX = blad EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR
     _________________________________________________________________

   4
   1
   Zapis do pliku (sys_write)
   EBX/RDI = deskryptor pliku
   ECX/RSI = adres bufora zrodlowego
   EDX/RDX = liczba bajtow do zapisania
   EAX=liczba zapisanych bajtow
   EAX = blad EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, ENOSPC, EPIPE
     _________________________________________________________________

   5
   2
   Otwarcie pliku (sys_open)
   EBX/RDI = adres nazwy pliku ASCIIZ
   ECX/RSI = bity dostepu
   EDX/RDX = prawa dostepu / tryb
   EAX=deskryptor pliku
   EAX = blad EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE,
   ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO,
   EROFS, ETXTBSY
     _________________________________________________________________

   6
   3
   Zamkniecie pliku (sys_close)
   EBX/RDI = deskryptor pliku
   EAX = 0
   EAX = blad EBADF, EINTR, EIO
     _________________________________________________________________

   7
   -
   Czekaj na zmiane stanu innego procesu (sys_waitpid)
   EBX/RDI = id procesu / specyfikacja
   ECX/RSI = NULL lub adres zmiennej DWORD, ktora otrzyma status
   EDX/RDX = opcje
   EAX=PID zakonczonego procesu
   [ECX/RSI] = (jesli podano adres bufora) stan wyjscia procesu
   EAX = blad ECHILD, EINVAL, ERESTARTSYS
     _________________________________________________________________

   8
   85
   Utworzenie pliku (sys_creat, nie create!)
   EBX/RDI = adres nazwy pliku ASCIIZ
   ECX/RSI = prawa dostepu / tryb
   EAX=deskryptor pliku
   EAX = blad EACCES, EEXIST, EFAULT, EISDIR, ELOOP, EMFILE,
   ENAMETOOLONG, ENFILE, ENOENT, ENODEV, ENODIR, ENOMEM, ENOSPC, ENXIO,
   EROFS, ETXTBSY
     _________________________________________________________________

   9
   86
   Utworzenie twardego dowiazania do pliku (sys_link)
   EBX/RDI = adres nazwy istniejacego pliku ASCIIZ
   ECX/RSI = adres nazwy nowego pliku ASCIIZ
   EAX = 0
   EAX=blad EACCES, EIO, EPERM, EEXIST, EFAULT, ELOOP, EMLINK,
   ENAMETOOLONG, ENOENT, ENOMEM, ENOSPC, ENOTDIR, EROFS, EXDEV
     _________________________________________________________________

   10
   87
   Usuniecie pliku (sys_unlink)
   EBX/RDI = adres nazwy pliku ASCIIZ
   EAX = 0
   EAX=blad EACCES, EFAULT, EIO, EISDIR, ELOOP, ENOENT, ENAMETOOLONG,
   ENOMEM, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   11
   59
   Uruchomienie innego programu (sys_execve)
   EBX/RDI = adres nazwy (ze sciezka) programu ASCIIZ
   ECX/RSI = adres zakonczonej dwordem 0 listy adresow argumentow
   uruchamianego programu ASCIIZ
   EDX/RDX = adres zakonczonej dwordem 0 listy adresow zmiennych
   srodowiska dla uruchamianego programu ASCIIZ
   nie wraca do programu wywolujacego
   EAX = blad 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 = blad EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT,
   ENOMEM, ENOTDIR
     _________________________________________________________________

   13
   201
   Pobierz czas (sys_time)
   EBX/RDI = NULL lub adres bufora, ktory otrzyma kopie wyniku
   EAX = liczba sekund od 1 Stycznia 1970 minus 1
   EAX = blad EFAULT
     _________________________________________________________________

   14
   133
   Utworzenie pliku specjalnego (sys_mknod)
   EBX/RDI = adres sciezki ASCIIZ
   ECX/RSI = typ urzadzenia OR prawa dostepu
   EDX/RDX,ESI/R10 - wynik dzialania makra makedev
   EAX = 0
   EAX = blad EACCES, EEXIST, EFAULT, EINVAL, ELOOP, ENAMETOOLONG,
   ENOENT, ENOMEM, ENOSPC, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   15
   90
   Zmiana uprawnien (sys_chmod)
   EBX/RDI = adres nazwy pliku/katalogu ASCIIZ
   ECX/RSI = nowe prawa dostepu
   EAX = 0
   EAX = blad EACCES, EBADF, EFAULT, EIO, ELOOP, ENAMETOOLONG, ENOENT,
   ENOMEM, ENOTDIR, EPERM, EROFS
     _________________________________________________________________

   16
   94
   Zmiana wlasciciela (sys_lchown)
   EBX/RDI = adres nazwy pliku/katalogu ASCIIZ
   ECX/RSI = nowy numer uzytkownika
   EDX/RDX = nowy numer grupy
   EAX = 0
   EAX = blad EPERM, EROFS, EFAULT, ENAMETOOLONG, ENOENT, ENOMEM,
   ENOTDIR, EACCES, ELOOP i inne
     _________________________________________________________________

   17
   -
   Funkcja systemowa sys_break
   (porzucone)
   Istnieje tylko dla zachowania zgodnosci
   EAX = blad ENOSYS
     _________________________________________________________________

   18
   -
   Funkcja systemowa sys_oldstat
   (porzucone)


     _________________________________________________________________

   19
   8
   Zmiana biezacej pozycji w pliku (sys_lseek)
   EBX/RDI = deskryptor pliku
   ECX/RSI = liczba bajtow, o ktora chcemy sie przesunac
   EDX/RDX = odkad zaczynamy ruch
   EAX = nowa pozycja wzgledem poczatku pliku
   EAX = blad EBADF, EINVAL, EISPIPE
     _________________________________________________________________

   20
   39
   Pobierz identyfikator biezacego procesu (sys_getpid)
   nic
   EAX = PID biezacego procesu
     _________________________________________________________________

   21
   165
   Montowanie systemu plikow (sys_mount)
   EBX/RDI = adres nazwy urzadzenia/pliku specjalnego
   ECX/RSI = adres sciezki do punktu montowania
   EDX/RDX = adres nazwy systemu plikow
   ESI/R10 = flagi montowania
   EDI/R8 = adres dodatkowych danych, niezalezne od urzadzenia
   EAX = 0
   EAX = blad - kazdy, ktory moze sie zdarzyc w systemie plikow lub
   jadrze
     _________________________________________________________________

   22
   -
   Odmontowanie systemu plikow (sys_umount)
   EBX/RDI = adres nazwy pliku specjalnego lub katalogu (zamontowanego)
   EAX = 0
   EAX = blad - kazdy, ktory moze sie zdarzyc w systemie plikow lub
   jadrze
     _________________________________________________________________

   23
   105
   Ustaw identyfikator uzytkownika (sys_setuid)
   EBX/RDI = nowy UID
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   24
   102
   Pobierz identyfikator uzytkownika (sys_getuid)
   nic
   EAX = numer UID
     _________________________________________________________________

   25
   -
   Ustaw czas systemowy (sys_stime)
   EBX/RDI = nowy czas jako liczba sekund, ktore uplynely od 1 Stycznia
   1970
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   26
   101
   Sledzenie procesu (sys_ptrace)
   EBX/RDI = zadane dzialanie
   ECX/RSI = identyfikator PID zadanego procesu
   EDX/RDX = adres w procesie docelowym
   ESI/R10 = adres w procesie sledzacym
   EAX zalezne od dzialania
   EAX = blad EIO, EFAULT, EPERM, ESRCH
     _________________________________________________________________

   27
   37
   Alarm - wyslanie sygnalu SIGALARM (sys_alarm)
   EBX/RDI = sekundy
   EAX = 0 lub liczba sekund do wykonania poprzednich alarmow
     _________________________________________________________________

   28
   -
   Funkcja systemowa sys_oldfstat
   (porzucone)


     _________________________________________________________________

   29
   34
   Pauza - spij az do otrzymania sygnalu (sys_pause)
   nic
   wraca tylko po sygnale, o ile procedura jego obslugi ma powrot. EAX =
   EINTR po sygnale
     _________________________________________________________________

   30
   132
   Zmien czas dostepu do pliku (sys_utime)
   EBX/RDI = adres nazwy pliku (ASCIIZ)
   ECX/RSI = adres struktury utimbuf, NULL gdy chcemy biezacy czas
   EAX = 0
   EAX = blad EACCES, ENOENT, EPERM, EROFS
     _________________________________________________________________

   31
   -
   Funkcja systemowa sys_stty
   (porzucone)
   --nieuzywane od 2.0--
   zawsze EAX = -1
     _________________________________________________________________

   32
   -
   Funkcja systemowa sys_gtty
   (porzucone)
   --nieuzywane od 2.0--
   zawsze EAX = -1
     _________________________________________________________________

   33
   21
   Sprawdz uprawnienia dostepu do pliku (sys_access)
   EBX/RDI = adres nazwy pliku ASCIIZ
   ECX/RSI = prawa dostepu / tryb (wartosci R_OK, W_OK, X_OK)
   EAX = 0
   EAX = blad - kazdy zwiazany z systemem plikow i plikami
     _________________________________________________________________

   34
   -
   Zmien priorytet procesu (sys_nice)
   EBX/RDI = liczba, o ktora zwiekszyc numer priorytetu (czyli zmniejszyc
   sam priorytet)
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   35
   -
   Pobierz biezaca date i czas - sys_ftime
   (przestarzale)
   --zamiast tego, uzywaj time, gettimeofday--
   EBX/RDI = adres struktury timeb
   zawsze EAX = 0
     _________________________________________________________________

   36
   162
   Zapisz pamiec podreczna na dysku (sys_sync)
   nic
   EAX zawsze = 0 i nie ma zadnych bledow
     _________________________________________________________________

   37
   62
   Wyslij sygnal do procesu (sys_kill)
   EBX/RDI = numer PID procesu (patrz tez specyfikacja)
   ECX/RSI = numer sygnalu
   EAX = 0
   EAX = blad EINVAL, EPERM, ESRCH
     _________________________________________________________________

   38
   82
   Przenies plik/Zmien nazwe pliku (sys_rename)
   EBX/RDI=adres starej nazwy (i ewentualnie sciezki) ASCIIZ
   ECX/RSI=adres nowej nazwy (i ewentualnie sciezki) ASCIIZ
   EAX = 0
   EAX = blad EBUSY, EEXIST, EISDIR, ENOTEMPTY, EXDEV (i inne bledy
   systemu plikow)
     _________________________________________________________________

   39
   83
   Utworz katalog (sys_mkdir)
   EBX/RDI = adres sciezki/nazwy ASCIIZ
   ECX/RSI = prawa dostepu / tryb
   EAX = 0
   EAX = blad - kazdy zwiazany z systemem plikow lub prawami dostepu
     _________________________________________________________________

   40
   84
   Usun katalog (sys_rmdir)
   EBX/RDI = adres sciezki/nazwy ASCIIZ
   EAX = 0
   EAX = blad 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 = blad EBADF, EMFILE (,EINVAL)
     _________________________________________________________________

   42
   22
   Utworz potok (sys_pipe)
   EBX/RDI = adres tablicy dwoch DWORDow
   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 = blad EFAULT, EMFILE, ENFILE
     _________________________________________________________________

   43
   100
   Pobierz czasy procesow (sys_times)
   EBX/RDI = adres struktury tms
   EAX = liczba taktow zegara
   EAX = blad
     _________________________________________________________________

   44
   -
   Funkcja systemowa sys_prof
   (porzucone)
   niezaimplementowane w jadrach 2.4
   zawsze EAX = ENOSYS
     _________________________________________________________________

   45
   12
   Alokacja i dealokacja pamieci (sys_brk)
   EBX/RDI = 0, aby poznac aktualny najwyzszy adres sekcji .bss
   EBX/RDI = (wirtualny) adres nowego wierzcholka .bss, powyzej spodu
   sekcji danych i ponizej bibliotek
   EAX = nowy najwyzszy adres
   EAX = blad ENOMEM
     _________________________________________________________________

   46
   106
   Ustaw ID grupy biezacego procesu (sys_setgid)
   EBX/RDI = nowy ID grupy
   EAX = 0
   EAX = blad EPERM
     _________________________________________________________________

   47
   104
   Pobierz ID grupy biezacego procesu (sys_getgid)
   nic
   EAX = ID grupy
     _________________________________________________________________

   48
   -
   Ustaw procedure obslugi sygnalu (sys_signal)
   EBX/RDI = numer sygnalu
   ECX/RSI = adres procedury przyjmujacej int i zwracajaca void (nic) lub
   wartosc SIG_IGN=1 (ignoruj sygnal) lub SIG_DFL=0 (resetuj sygnal na
   domyslne zachowanie)
   EAX = adres poprzedniej procedury obslugi
   EAX = blad SIG_ERR
     _________________________________________________________________

   49
   107
   Pobierz efektywne ID uzytkownika biezacego procesu (sys_geteuid)
   nic
   EAX = UID
     _________________________________________________________________

   50
   108
   Pobierz efektywne ID grupy biezacego procesu (sys_getegid)
   nic
   EAX = GID
     _________________________________________________________________

   Kolejna czesc (klawisz dostepu 4)
   Spis tresci off-line (klawisz dostepu 1)
   Spis tresci on-line (klawisz dostepu 2)
   Ulatwienia dla niepelnosprawnych (klawisz dostepu 0)
