Secțiuni de Memorie și Date Neinițializate în Assembly: Directiva section .bss în Assembly (x86_64)

Ghid complet pentru organizarea memoriei în programe x86_64: diferența dintre .data, .rodata, .text și .bss, rezervarea spațiului neinițializat cu resb, resw, resd și resq.

Sintaxă
section .bss; buffer: resb 4096 ; rezervă 4KB fără a umfla binarul

Un fișier binar executabil (ELF pe Linux sau Mach-O pe macOS) este împărțit în segmente logice și secțiuni cu drepturi de acces specifice (citire, scriere, execuție). Înțelegerea rolului secțiunii .bss este vitală pentru scrierea de cod compact.

Exemplu comparativ: .data vs .rodata vs .bss vs .text
; 1. Secțiunea .rodata: Date constante cu drept DOAR de citire (Read-Only Data)
section .rodata
    mesaj_intampinare: db "Sistem inițializat cu succes!", 10, 0
    pi_constant:       dq 3.141592653589793

; 2. Secțiunea .data: Variabile globale cu valori inițiale explicite (Read-Write Data)
; Ocupă spațiu fizic direct în fișierul executabil de pe disc!
section .data
    contor_evenimente: dq 1
    stare_aplicatie:   dd 0x01

; 3. Secțiunea .bss: Date neinițializate (Block Started by Symbol)
; NU OCUPĂ SPAȚIU PE DISC! Sistemul de operare alocă memorie cu zero la rulare:
section .bss
    buffer_retea:      resb 65536      ; Rezervă 64 KB de octeți neinițializați
    tabel_utilizatori: resq 1024       ; Rezervă 1024 de pointere pe 64 de biți (8 KB)
    flag_temporar:     resd 1          ; Rezervă un întreg de 4 octeți (32-bit)

; 4. Secțiunea .text: Instrucțiuni mașină executabile (Read + Execute)
section .text
global _start
_start:
    ; Folosim buffer_retea fără a avea un binar umflat cu 64KB de zerouri pe disc!
    mov byte [buffer_retea], 0xAA
    ; ...
    mov rax, 60
    xor rdi, rdi
    syscall
Directivă .bss Tip rezervare Dimensiune element
resb N Reserve Bytes N * 1 octet
resw N Reserve Words N * 2 octeți
resd N Reserve Doublewords N * 4 octeți
resq N Reserve Quadwords N * 8 octeți
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Secțiuni de Memorie și Date Neinițializate în Assembly: Directiva section .bss

Ai o nelămurire despre utilizarea comenzii Secțiuni de Memorie și Date Neinițializate în Assembly: Directiva section .bss sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.