Pentru a citi un fișier, a trimite date în consolă sau a aloca memorie, o aplicație din User-Space trebuie să ceară intervenția nucleului sistemului de operare (Kernel). În arhitectura x86_64, comutarea securizată din User-Mode (Ring 3) în Kernel-Mode (Ring 0) se realizează prin instrucțiunea hardware modernă SYSCALL (care a înlocuit vechea întrerupere software lentă int 0x80 din epoca 32-bit).
| Syscall | ID în RAX | Parametru 1 (RDI) | Parametru 2 (RSI) | Parametru 3 (RDX) |
|---|---|---|---|---|
sys_read |
0 |
File Descriptor (0 = stdin) |
Adresă tampon buffer | Număr maxim de octeți |
sys_write |
1 |
File Descriptor (1 = stdout) |
Adresă șir de caractere | Lungimea șirului în octeți |
sys_open |
2 |
Calea fișierului (string null-terminated) | Flag-uri acces (O_RDONLY etc.) | Permisiuni (mode) |
sys_exit |
60 |
Cod de ieșire (0 = succes) |
– | – |
Apelul direct al nucleului pentru afișarea unui text și ieșire
; Scrierea mesajului pe ecran (sys_write):
mov rax, 1 ; Numărul apelului de sistem pentru sys_write
mov rdi, 1 ; Descriptorul de fișier 1 = STDOUT (consola)
mov rsi, mesaj ; Adresa memoriei unde se află textul
mov rdx, 14 ; Lungimea textului (14 octeți)
syscall ; Invocă nucleul Linux!
; Oprirea curată a procesului (sys_exit):
mov rax, 60 ; Numărul apelului pentru sys_exit
mov rdi, 0 ; Codul de retur 0 (Succes)
syscall ; Procesul se încheie imediat
Întrebări & Exemple de Cod:
Apeluri de Sistem Directe în Linux (Syscalls): Instrucțiunea SYSCALLAi o nelămurire despre utilizarea comenzii
Apeluri de Sistem Directe în Linux (Syscalls): Instrucțiunea SYSCALLsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.