汇编语言 内存管理
内核提供 sys_brk() 系统调用,用于分配内存,而无需稍后移动内存。此调用在内存中应用程序映像的正后方分配内存。此系统功能允许您设置数据段中的最高可用地址。
此系统调用采用一个参数,这是需要设置的最高内存地址。该值存储在 EBX 寄存器中。
如果出现任何错误,sys_brk() 返回 -1 或返回负错误代码本身。下面的实例演示了动态内存分配。
实例
以下程序使用 sys_brk() 系统调用分配 16kb 内存:
section .textglobal _start ;必须声明才能使用 gcc_start: ;告诉链接器入口点mov eax, 45 ;sys_brkxor ebx, ebxint 80hadd eax, 16384 ;要保留的字节数mov ebx, eaxmov eax, 45 ;sys_brkint 80hcmp eax, 0jl exit ;exit, if errormov edi, eax ;EDI = highest available addresssub edi, 4 ;pointing to the last DWORDmov ecx, 4096 ;number of DWORDs allocatedxor eax, eax ;clear eaxstd ;backwardrep stosd ;repete for entire allocated areacld ;put DF flag to normal statemov eax, 4mov ebx, 1mov ecx, msgmov edx, lenint 80h ;打印消息exit:mov eax, 1xor ebx, ebxint 80hsection .datamsg db "Allocated 16 kb of memory!", 10len equ $ - msg
结果如下:
Allocated 16 kb of memory!