位置:首页 > > Assembly 内存管理

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!