System operacyjny Linux to potężna maszyna, która zarządza zasobami sprzętowymi, procesami, pamięcią i komunikacją. Ale jak właściwie aplikacje komunikują się z jądrem systemu? Odpowiedź brzmi: przez syscalle, czyli wywołania systemowe.

W tym artykule poznasz:
- Czym są syscallle i jak działają
- Jak wygląda ich wywołanie w asemblerze
- Pełną tabelę najważniejszych syscalli z argumentami
- Jak je śledzić i debugować
Czym jest syscall?
Syscall to specjalna funkcja, która pozwala programowi użytkownika poprosić jądro systemu o wykonanie operacji — np. odczyt pliku, wypisanie tekstu, utworzenie procesu czy komunikację sieciową.
W Linuksie syscall wywołuje się przez instrukcję syscall
(na architekturze x86_64), przekazując numer syscalla w rejestrze rax
, a argumenty w rejestrach rdi
, rsi
, rdx
, r10
, r8
, r9
.
Przykład w asemblerze
nasm
mov rax, 1 ; syscall: write
mov rdi, 1 ; stdout
mov rsi, msg ; wskaźnik do danych
mov rdx, len ; długość danych
syscall
Tabela najważniejszych syscalli w Linuksie (x86_64)
Poniżej znajdziesz zestawienie najczęściej używanych syscalli wraz z ich numerami i argumentami. Dane pochodzą z filippo.io/linux-syscall-table.
Nr | Nazwa | Argumenty | Opis |
---|---|---|---|
0 | read | fd , buf , count | Odczyt danych z pliku |
1 | write | fd , buf , count | Zapis danych do pliku |
2 | open | filename , flags , mode | Otwarcie pliku |
3 | close | fd | Zamknięcie pliku |
60 | exit | status | Zakończenie procesu |
39 | getpid | — | Pobranie PID procesu |
57 | fork | — | Utworzenie nowego procesu |
59 | execve | filename , argv , envp | Uruchomienie nowego programu |
63 | uname | utsname* | Informacje o systemie |
80 | chdir | path | Zmiana katalogu roboczego |
93 | munmap | addr , length | Zwolnienie pamięci |
202 | gettimeofday | tv , tz | Pobranie czasu systemowego |
231 | exit_group | status | Zakończenie wszystkich wątków |
257 | openat | dirfd , pathname , flags , mode | Otwarcie pliku względnie |
322 | clock_gettime | clockid , timespec* | Precyzyjny pomiar czasu |
Argumenty są przekazywane w kolejności: rdi
, rsi
, rdx
, r10
, r8
, r9
.
Jak śledzić syscalle?
1. strace
strace ./program
Pokazuje wszystkie wywołania systemowe wykonywane przez program.
2. perf trace
sudo perf trace
Zaawansowane śledzenie syscalli i zdarzeń jądra.
Ciekawostki
- Syscalle są różne dla każdej architektury (np. ARM, x86, RISC-V)
- Można pisać własne syscallle w jądrze (dla programistów kernelowych)
- Niektóre syscallle są przestarzałe i zastępowane nowszymi (np.
open
→openat
)
Podsumowanie
Syscalle to fundament komunikacji między aplikacjami a jądrem Linuksa. Znajomość ich działania pozwala pisać bardziej wydajne, bezpieczne i niskopoziomowe programy. Jeśli interesuje Cię asembler, bezpieczeństwo systemowe lub pisanie własnych narzędzi — znajomość syscalli to absolutna podstawa.