📅  最后修改于: 2020-11-05 05:10:55             🧑  作者: Mango
内核提供sys_brk()系统调用,以分配内存,而无需稍后移动它。该调用在内存中的应用程序映像后面分配内存。此系统函数使您可以在数据部分中设置最高可用地址。
该系统调用采用一个参数,这是需要设置的最高内存地址。此值存储在EBX寄存器中。
如果发生任何错误,sys_brk()返回-1或返回负错误代码本身。以下示例演示了动态内存分配。
以下程序使用sys_brk()系统调用分配16kb的内存-
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!