Assembly汇编 内存管理 - Assembly汇编
由内核提供的sys_brk()系统调用,分配内存而无需移除。这个调用应用图像存储在内存分配内存后面。本系统功能允许您设置的最高的可用地址的数据部分。
这个系统调用需要一个参数,这是最高的内存地址需要设置。这个值被存储在EBX寄存器。
任何错误的情况下sys_brk()返回-1或返回负的错误代码本身。下面的例子演示了动态内存分配。
例子:
下面的程序分配16KB内存使用sys_brk()系统调用:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry yiibai
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 ;yiibaiing 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!