由核心提供的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!