Как вы это сделали, вызовите один раз, чтобы извлечь текущее дно кучи, а затем переместите верхнюю часть кучи (что является значением brk). Однако ваш код неверен при использовании 64-битного набора регистров r.x
. Если ваш Linux 32-разрядный (что подразумевается при использовании 45 для номера системного вызова), тогда вы хотите установить 32-битный регистр:
mov eax, 45 ; brk
mov ebx, 0 ; arg 1: 0 = fail returning brk value in rax
int 0x80 ; syscall
mov dword ptr [brk_firstLocation], rax ; save result
mov eax, 45 ; brk
mov ebx, 4 ; arg 1: allocate 4 bytes for a 32-bit int
int 0x80 ; syscall
mov eax, dword ptr [brk_firstLocation] ; reload rax with allocated memory address.
mov dword ptr [eax], 42 ; use result: store 42 in newly allocated storage
Конечно, вы можете повторно загрузить сохраненный значение для повторного использования столько раз, сколько необходимо.