Assembly - Gestione della memoria
Il sys_brk()la chiamata di sistema è fornita dal kernel, per allocare la memoria senza la necessità di spostarla in seguito. Questa chiamata alloca la memoria proprio dietro l'immagine dell'applicazione nella memoria. Questa funzione di sistema consente di impostare l'indirizzo più alto disponibile nella sezione dati.
Questa chiamata di sistema accetta un parametro, che è l'indirizzo di memoria più alto che deve essere impostato. Questo valore è memorizzato nel registro EBX.
In caso di errore, sys_brk () restituisce -1 o restituisce il codice di errore negativo stesso. L'esempio seguente mostra l'allocazione dinamica della memoria.
Esempio
Il seguente programma alloca 16kb di memoria usando la chiamata di sistema sys_brk () -
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov eax, 45 ;sys_brk
xor ebx, ebx
int 80h
add eax, 16384 ;number of bytes to be reserved
mov ebx, eax
mov eax, 45 ;sys_brk
int 80h
cmp eax, 0
jl exit ;exit, if error
mov edi, eax ;EDI = highest available address
sub edi, 4 ;pointing to the last DWORD
mov ecx, 4096 ;number of DWORDs allocated
xor eax, eax ;clear eax
std ;backward
rep stosd ;repete for entire allocated area
cld ;put DF flag to normal state
mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, len
int 80h ;print a message
exit:
mov eax, 1
xor ebx, ebx
int 80h
section .data
msg db "Allocated 16 kb of memory!", 10
len equ $ - msg
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Allocated 16 kb of memory!