由內(nèi)核提供的sys_brk()系統(tǒng)調(diào)用,分配內(nèi)存而無需移除。這個調(diào)用應用圖像存儲在內(nèi)存分配內(nèi)存后面。本系統(tǒng)功能允許您設(shè)置的最高的可用地址的數(shù)據(jù)部分。
這個系統(tǒng)調(diào)用需要一個參數(shù),這是最高的內(nèi)存地址需要設(shè)置。這個值被存儲在EBX寄存器。
任何錯誤的情況下sys_brk()返回-1或返回負的錯誤代碼本身。下面的例子演示了動態(tài)內(nèi)存分配。
下面的程序分配16KB內(nèi)存使用sys_brk()系統(tǒng)調(diào)用:
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
上面的代碼編譯和執(zhí)行時,它會產(chǎn)生以下結(jié)果:
Allocated 16 kb of memory!