Pemanggilan Sistem Linux (syscall)
Pelajari cara menjalankan operasi umum sistem operasi seperti I/O file, pengelolaan proses, dan alokasi memori menggunakan pemanggilan sistem Linux.
Pemanggilan Sistem Linux (syscall) adalah pelajaran Assembly Language & x86 Low-Level Systems Programming gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Assembly Language & x86 Low-Level Systems Programming, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Assembly Language & x86 Low-Level Systems Programming mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
What are System Calls?
Welcome! In this lesson, we'll dive into Linux System Calls (syscalls). These are the fundamental way user-space programs request services from the operating system's kernel.
Think of them as a special set of functions that your program can call to do powerful things, like interacting with files, managing processes, or allocating memory.
User vs. Kernel Mode
Modern operating systems operate in different privilege levels. Typically, there's user mode (where your applications run) and kernel mode (where the OS core runs).
- User Mode: Limited access to hardware and critical memory.
- Kernel Mode: Full access, handles system resources securely.
System calls are the controlled gateway for user-mode programs to temporarily switch to kernel mode and ask the OS to perform privileged operations on their behalf.
Invoking Syscalls in x86-64
On x86-64 Linux, system calls are primarily invoked using the syscall instruction. Before calling syscall, you load specific registers with values:
- RAX: Holds the system call number.
- RDI, RSI, RDX, R10, R8, R9: Hold the system call arguments (up to 6).
- The return value is placed back in RAX.
Finding Syscall Numbers
How do you know which number corresponds to which system call? You can look them up!
- Use the
man syscallscommand in your terminal. - Consult header files like
/usr/include/asm/unistd_64.h.
For example, sys_write is system call number 1, and sys_exit is number 60.
Basic File I/O: sys_write
One of the most common syscalls is sys_write, used to write data to a file descriptor. Its parameters are:
- RDI: File descriptor (e.g., 1 for stdout).
- RSI: Pointer to the buffer containing data.
- RDX: Number of bytes to write.
Standard file descriptors are 0 (stdin), 1 (stdout), and 2 (stderr).
Hello, Syscall! Example
Let's write a simple program that prints "Hello, Syscall!" to the console using sys_write and then exits using sys_exit.
Try running this example:
section .data
msg db "Hello, Syscall!", 0xa ; Our string + newline
len equ $ - msg ; Length of our string
section .text
global _start
_start:
; sys_write(fd=1, buf=msg, count=len)
mov rax, 1 ; syscall number for sys_write
mov rdi, 1 ; fd=1 (stdout)
mov rsi, msg ; buffer (our string)
mov rdx, len ; count (length of string)
syscall ; Invoke kernel
; sys_exit(status=0)
mov rax, 60 ; syscall number for sys_exit
mov rdi, 0 ; exit status 0
syscall ; Invoke kernelBasic File I/O: sys_read
The counterpart to sys_write is sys_read, which reads data from a file descriptor into a buffer. Its parameters are:
- RDI: File descriptor (e.g., 0 for stdin).
- RSI: Pointer to the buffer to store data.
- RDX: Maximum number of bytes to read.
sys_read returns the number of bytes actually read, or an error code.
Echoing Input Example
Here's a program that reads up to 256 bytes from standard input (stdin) and then writes whatever it read back to standard output (stdout).
Try running this example:
section .bss
buffer resb 256 ; A buffer to store input
section .text
global _start
_start:
; sys_read(fd=0, buf=buffer, count=256)
mov rax, 0 ; syscall number for sys_read
mov rdi, 0 ; fd=0 (stdin)
mov rsi, buffer ; buffer to store input
mov rdx, 256 ; max bytes to read
syscall ; Invoke kernel
mov rbp, rax ; Store bytes read in rbp
; sys_write(fd=1, buf=buffer, count=rbp)
mov rax, 1 ; syscall number for sys_write
mov rdi, 1 ; fd=1 (stdout)
mov rsi, buffer ; buffer (our read input)
mov rdx, rbp ; count (actual bytes read)
syscall ; Invoke kernel
; sys_exit(status=0)
mov rax, 60 ; syscall number for sys_exit
mov rdi, 0 ; exit status 0
syscall ; Invoke kernelSyscall Arguments Check
Let's quickly check your understanding of how arguments are passed for x86-64 Linux system calls.
Recap: Linux System Calls
You've learned the basics of Linux system calls!
- Syscalls are how user programs request kernel services.
- The
syscallinstruction (x86-64) initiates the call. - RAX holds the syscall number, and RDI-R9 hold arguments.
- We explored
sys_write(to stdout),sys_read(from stdin), andsys_exit.
Mastering syscalls is key to understanding low-level Linux programming and operating system interaction.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemanggilan Sistem Linux (syscall)” gratis?
Ya — teks lengkap “Pemanggilan Sistem Linux (syscall)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Assembly Language & x86 Low-Level Systems Programming, upgrade ke CoddyKit PRO. Kursus Assembly Language & x86 Low-Level Systems Programming mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemanggilan Sistem Linux (syscall)”?
Pelajari cara menjalankan operasi umum sistem operasi seperti I/O file, pengelolaan proses, dan alokasi memori menggunakan pemanggilan sistem Linux. Kamu berlatih Assembly Language & x86 Low-Level Systems Programming dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Assembly Language & x86 Low-Level Systems Programming?
Tidak diperlukan pengalaman sebelumnya. Assembly Language & x86 Low-Level Systems Programming di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pemanggilan Sistem Linux (syscall)” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Assembly Language & x86 Low-Level Systems Programming ini?
Ya. Setiap pelajaran Assembly Language & x86 Low-Level Systems Programming menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Memori Virtual
- Pemanggilan Sistem Linux (syscall)
- Interaksi dengan API Windows
- Memori Dinamis: Alokasi Heap dalam Assembly