30

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

有哪些最简单但有效的方法来做到这一点?

在 Intel 386+ 计算机上。

4

4 回答 4

14

在 Linuxmmap2上,这是一个合理的系统调用,可用于低级别。它需要 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

(有关参数传递的详细信息,请参见相关内核源代码)

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

mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
于 2012-12-12T22:57:33.900 回答
9

brk(2). 并看看ELF

于 2010-05-06T14:58:39.827 回答
4

另一种方法brk()是使用mmap()系统调用,使用MAP_ANONYMOUS | MAP_PRIVATE.

于 2010-05-07T06:10:08.227 回答
3

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

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

于 2010-05-06T14:57:07.440 回答