Ensamblaje - Gestión de memoria
los sys_brk()El kernel proporciona la llamada al sistema para asignar memoria sin necesidad de moverla más tarde. Esta llamada asigna memoria justo detrás de la imagen de la aplicación en la memoria. Esta función del sistema le permite establecer la dirección más alta disponible en la sección de datos.
Esta llamada al sistema toma un parámetro, que es la dirección de memoria más alta necesaria para configurar. Este valor se almacena en el registro EBX.
En caso de cualquier error, sys_brk () devuelve -1 o devuelve el propio código de error negativo. El siguiente ejemplo demuestra la asignación de memoria dinámica.
Ejemplo
El siguiente programa asigna 16kb de memoria usando la llamada al 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
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Allocated 16 kb of memory!