
彙編 - 記憶體管理
核心提供了 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!
廣告