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

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

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

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

在 Intel 386+ 计算机上。

最佳答案

在 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

关于linux - 如何在 Linux 下使用汇编和系统调用动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782010/

相关文章:

c - 如何用c编译汇编语言

assembly - 从 exe 文件中取回汇编级代码?

linux - 通过 SSH 连接到 EC2 实例时突然出现错误

Linux 模块 makefile 编译错误

c++ - sem_wait() 在 linux 上唤醒失败

linux - 为什么带有 'direct'(O_DIRECT)标志的dd这么快?

assembly - 大括号 "{"在 AT&T 汇编中意味着什么

c - 如何使用C和系统调用模拟bash的 "ulimit -u"命令?

python - 重复 os.path.isdir 调用中的巨大内存泄漏?

linux - 冗余的 Linux 内核系统调用