汇编 - 内存管理
内核提供了 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!
广告