Assembly - Speicherverwaltung
Das sys_brk()Der Systemaufruf wird vom Kernel bereitgestellt, um Speicher zuzuweisen, ohne ihn später verschieben zu müssen. Dieser Aufruf weist Speicher direkt hinter dem Anwendungsabbild im Speicher zu. Mit dieser Systemfunktion können Sie die höchste verfügbare Adresse im Datenbereich einstellen.
Dieser Systemaufruf verwendet einen Parameter, bei dem es sich um die höchste Speicheradresse handelt, die eingestellt werden muss. Dieser Wert wird im EBX-Register gespeichert.
Im Fehlerfall gibt sys_brk () -1 oder den negativen Fehlercode selbst zurück. Das folgende Beispiel zeigt die dynamische Speicherzuordnung.
Beispiel
Das folgende Programm reserviert 16 KB Speicher mithilfe des Systemaufrufs sys_brk () -
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
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Allocated 16 kb of memory!