Poniżej znajdują się wywołania systemowe potrzebne do rozwiązania zadań, pełną listę można znaleźć np. tutaj.
W przypadku systemów 32 bitowych numer wywołania umieszczamy w eax, natomiast dla systemów 64 bitowych w rax.
Proszę zwrócić uwagę, że dla tych systemów są różne numeracje wywołań systemowych jak również w innych rejestrach umieszcza się parametry.
Listy wywołań systemowych danego Linuxa można szukać w plikach
/usr/include/asm/unistd_32.h
/usr/include/asm/unistd_64.h
A następnie dla konkretnego wywołania argumenty możemy sprawdzić przez plecenie man np.
man exit
Argumenty umieszczamy kolejno w rejestrach
32bit: EBX, ECX, EDX, ESI, EDI, EBP
64bit: EDI, ESI, EDX, R10, R8, R9
Wywołanie systemowe może dodatkowo zmodyfikować wartość rejestrów RCX, R11
Numer: EAX = 1 / RAX = 60
Parametry: EBX/RDI = kod zakończenia programu
Numer: EAX = 4 / RAX = 1
Parametry:
EBX / RDI = deskryptor pliku (ekran = 1)
ECX / RSI = adres ciągu bajtów do zapiania
EDX / RDX = liczba bajtów w ciągu
Zwraca w EAX liczbę zapisanych bajtów lub kod błędu
Numer: EAX = 3 / RAX = 0
Parametry:
EBX / RDI = deskryptor pliku (klawiatura = 0)
ECX / RSI = adres bufora docelowego
EDX / RDX = liczba bajtów do przeczytania
Zwraca w EAX liczbę przeczytanych bajtów lub kod błędu
Numer: EAX = 5 / RAX = 2
Parametry:
EBX / RDI = adres pod którym znajduje sie nazwa pliku (zakonczona zerem)
ECX / RSI = tryb pracy
EDX / RDX = prawa dostępu (jeżeli tworzymy nowy plik)
Zwraca w EAX deskryptor pliku lub kod błędu
Tryby pracy (z /usr/include/asm/fcntl.h)
Prawa dostępu (/usr/include/linux/stat.h)
Numer: EAX = 6 / RAX = 3
Parametry:
EBX / RDI = deskryptor pliku
Zwraca w EAX kod błędu
Numer: EAX = 13 / RAX = 201
Parametry:
EBX / RDI = NULL lub adres bufora, który otrzyma kopie wyniku
Zwraca w EAX liczbę sekund która upłynęła od 1 stycznia 1970 roku (minus 1)