Montaj - Bellek Yönetimi
sys_brk()sistem çağrısı, belleği daha sonra taşımaya gerek kalmadan ayırmak için çekirdek tarafından sağlanır. Bu çağrı, bellekteki uygulama görüntüsünün hemen arkasında bellek ayırır. Bu sistem işlevi, veri bölümünde mevcut en yüksek adresi ayarlamanıza olanak tanır.
Bu sistem çağrısı, ayarlanması gereken en yüksek bellek adresi olan bir parametre alır. Bu değer EBX kaydında saklanır.
Herhangi bir hata durumunda sys_brk () -1 ile döner veya negatif hata kodunu kendisi döndürür. Aşağıdaki örnek, dinamik bellek tahsisini gösterir.
Misal
Aşağıdaki program sys_brk () sistem çağrısını kullanarak 16kb bellek ayırır -
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
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Allocated 16 kb of memory!