Wszystko o syscallach w Linuksie – pełna lista i jak z nich korzystać

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.

NrNazwaArgumentyOpis
0readfd, buf, countOdczyt danych z pliku
1writefd, buf, countZapis danych do pliku
2openfilename, flags, modeOtwarcie pliku
3closefdZamknięcie pliku
60exitstatusZakończenie procesu
39getpidPobranie PID procesu
57forkUtworzenie nowego procesu
59execvefilename, argv, envpUruchomienie nowego programu
63unameutsname*Informacje o systemie
80chdirpathZmiana katalogu roboczego
93munmapaddr, lengthZwolnienie pamięci
202gettimeofdaytv, tzPobranie czasu systemowego
231exit_groupstatusZakończenie wszystkich wątków
257openatdirfd, pathname, flags, modeOtwarcie pliku względnie
322clock_gettimeclockid, 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. openopenat)

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.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.