首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Linux下使用汇编和系统调用动态分配内存

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

Stack Overflow用户
提问于 2010-05-06 22:54:05
回答 4查看 20.6K关注 0票数 30

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

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

在英特尔386+计算机上。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-06 22:58:40

brk(2)。看看ELF吧。

票数 9
EN

Stack Overflow用户

发布于 2012-12-13 06:57:34

在Linux上,mmap2是一个合理的系统调用,可以在较低的级别上用于此目的。它有6个参数,所以在IA32中你可以这样调用它:

代码语言:javascript
复制
    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验证了它的工作情况,它产生了:

代码语言:javascript
复制
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
票数 14
EN

Stack Overflow用户

发布于 2010-05-07 14:10:08

brk()的另一种替代方法是通过MAP_ANONYMOUS | MAP_PRIVATE使用mmap()系统调用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2782010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档