如何在Linux下使用汇编和系统调用动态分配内存

时间:2010-05-06 14:54:05

标签: linux assembly system-calls dynamic-memory-allocation

我正在寻找一些在Linux下使用汇编语言并使用系统调用的动态内存分配的良好代码示例,而不是malloc和朋友。

有哪些最简单但有效的方法呢?

在Intel 386+计算机上。

4 个答案:

答案 0 :(得分:10)

在Linux上mmap2是一个明智的系统调用,可以在低级别使用它。它需要6个参数,所以在IA32中你可以使用:

来调用它
    mov eax, 192    ; mmap2
    xor ebx, ebx    ; addr = NULL
    mov ecx, 4096   ; len = 4096
    mov edx, $7     ; prot = PROT_READ|PROT_WRITE|PROT_EXEC
    mov esi, $22    ; flags = MAP_PRIVATE|MAP_ANONYMOUS
    mov edi, -1     ; fd = -1
    xor ebp, ebp    ; offset = 0 (4096*0)
    int $80         ; make call

(有关参数传递的详细信息,请参阅relevant kernel source

我使用NASM构建了它并使用strace验证了它的工作原理:

mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000

答案 1 :(得分:5)

brk(2)。并查看ELF

答案 2 :(得分:2)

brk()的替代方法是使用mmap()系统调用MAP_ANONYMOUS | MAP_PRIVATE

答案 3 :(得分:1)

使用brk系统调用来更改数据段的结尾。

看看这里:http://www.linuxjournal.com/article/6390了解你在做什么。