Assembly彙編 內存管理
由內核提供的**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!
0 條評論,你可以發表評論,我們會進行改進
