汇编语言 内存管理
内核提供 sys_brk()
系统调用,用于分配内存,而无需稍后移动内存。此调用在内存中应用程序映像的正后方分配内存。此系统功能允许您设置数据段中的最高可用地址。
此系统调用采用一个参数,这是需要设置的最高内存地址。该值存储在 EBX 寄存器中。
如果出现任何错误,sys_brk()
返回 -1 或返回负错误代码本身。下面的实例演示了动态内存分配。
实例
以下程序使用 sys_brk()
系统调用分配 16kb 内存:
section .text
global _start ;必须声明才能使用 gcc
_start: ;告诉链接器入口点
mov eax, 45 ;sys_brk
xor ebx, ebx
int 80h
add eax, 16384 ;要保留的字节数
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 ;打印消息
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!