= Wywoływanie funkcji systemowych =

Konwencja wywołania funkcji systemowej w Linuksie:
- Numer funkcji systemowej jest umieszczany w rejestrze EAX
- Kolejne argumenty są umieszczane kolejno w rejestrach:
EBX
ECX
EDX
ESI
EDI
EBP
- Wywołujemy jądro przerwaniem 0x80, czyli instrukcją:
int 80h
- Wynik jest zwracany w rejestrze EAX

Numery funkcji systemowych znajdują się w pliku:
/usr/include/asm-i386/unistd.h

= Odczytywanie parametrów wywołania programu = 

Argumenty wywołania programu są odkładane na stosie.
Na szczycie stosu jest liczba argumentów (argc). Należy pamiętać, że nazwa
programu też jest argumentem, więc zawsze jest >=1 argumentów.

Niżej na stosie jest odłożona tablica wskaźników na argumenty.

Inne źródła informacji:
- http://lxr.linux.no
- http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html#SIX-ARG
- http://www.erik-n.net/studies/linux_boot_c/linux_boot_c.pdf

Zadania:
- Napisać program, który wypisuje na stdout swój pid.
- Napisać program, który czyta ze standardowego wejścia, a zapisuje na
standardowe wyjście i na stderr tę samę porcję danych (takie proste tee).
- Zmodyfikować program syscall.asm tak, by zamiast czytać z stdin
otwierał plik, którego nazwa podana jest jako pierwszy argument wywołania
programu.
- Napisać program, który wykonuje fork i zwraca numer pid-a dziecka.