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!