Сборка - Управление памятью
В sys_brk()Системный вызов предоставляется ядром для выделения памяти без необходимости ее перемещения позже. Этот вызов выделяет память сразу за изображением приложения в памяти. Эта системная функция позволяет вам установить самый высокий доступный адрес в разделе данных.
Этот системный вызов принимает один параметр, который является наивысшим адресом памяти, который необходимо установить. Это значение хранится в регистре EBX.
В случае какой-либо ошибки sys_brk () возвращает -1 или сам возвращает отрицательный код ошибки. В следующем примере демонстрируется динамическое выделение памяти.
пример
Следующая программа выделяет 16 КБ памяти с помощью системного вызова 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
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Allocated 16 kb of memory!